[python] 파이썬 3 회전 범위를 목록으로

숫자 1-1000가 있는 목록을 만들려고 합니다. 분명히 이것은 쓰기 / 읽기를 귀찮게 할 것이므로 범위가있는 목록을 만들려고합니다. 파이썬 2에서는 다음과 같습니다.

some_list = range(1,1000)

작동했지만 Python 3에서는 범위가 xrangePython 2 와 비슷 합니까?

누구든지 이것에 대한 통찰력을 제공 할 수 있습니까?



답변

range 객체에서 목록을 만들 수 있습니다.

my_list = list(range(1, 1001))

이것은 python2.x의 생성기로도 수행하는 방법입니다. my_list[i]더 효율적으로 가치를 얻을 수 있기 때문에 일반적으로 목록이 필요하지는 않지만 ( i + 1) 반복해야 할 경우 다시 넘어갈 수 있습니다 range.

또한 python2.x에서는 xrange여전히 색인 가능 1 입니다. 이것은 rangepython3.x에서 동일한 속성 2를 가지고 있음을 의미합니다

1print xrange(30)[12] 은 python2.x에서 작동합니다.

2 python3.x 에서 1 과 유사한 문 print(range(30)[12])은 작동합니다.


답변

파이썬 <= 3.4에서는 다른 사람들이 제안한 것처럼 list(range(10))목록을 범위 (일반적으로 반복 가능)에서 벗어나게 만들기 위해 사용할 수 있습니다 .

3.5압축 풀기 일반화와 함께 Python에 도입 된 또 다른 대안 *은 목록 리터럴 을 사용 하는 것입니다 [].

>>> r = range(10)
>>> l = [*r]
>>> print(l)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

이것은와 동일하지만 list(r)리터럴 구문이며 함수 호출이 포함되어 있지 않기 때문에 더 빠르게 실행할 수 있습니다. 골프를 코딩 해야하는 경우 문자가 적습니다. 🙂


답변

Python 3.x에서는 range()함수 자체 유형이 있습니다. 따라서이 경우 반복자를 사용해야합니다

list(range(1000))


답변

Python3에 범위가 지정된 목록을 직접 가져 오는 기능이없는 이유는 원래 Python3 디자이너가 Python2의 초보자이기 때문입니다. 그는 range()for 루프에서 함수 의 사용만을 고려 했으므로 목록을 확장 할 필요가 없습니다. 실제로, 종종 range()리스트를 생성 하고 함수에 전달하기 위해 함수를 사용해야합니다 .

따라서이 경우 Python3에 비해 Python3이 덜 편리합니다.

  • Python2에서 우리는 xrange()range();
  • Python3에서, 우리가 range()하고list(range())

그럼에도 불구하고 여전히 다음과 같은 방법으로 목록 확장을 사용할 수 있습니다.

[*range(N)]


답변

실제로 목록에서 숫자 1-1000을 사용할 필요는 없습니다. 그러나 어떤 이유로 든이 숫자가 실제로 필요한 경우 다음을 수행 할 수 있습니다.

[i for i in range(1, 1001)]

간단히 말하면 이해력을 나열하십시오.

위의 목록 이해는 다음과 같이 번역됩니다.

nums = []
for i in range(1, 1001):
    nums.append(i)

이것은 2.x부터의 목록 이해 구문 일뿐입니다. 파이썬 3에서 작동한다는 것을 알고 있지만 업그레이드 된 구문이 있는지 확실하지 않습니다.

범위는 첫 번째 매개 변수를 포함하여 시작합니다. 두 번째 매개 변수를 포함하지 않고 위로 끝납니다 (2 매개 변수를 제공 할 때; 첫 번째 매개 변수가 꺼져 있으면 ‘0’에서 시작합니다)

range(start, end+1)
[start, start+1, .., end]


답변

실제로 1-1000 (포함)을 원하는 경우 함수가 시작에서 (end-1) (포함)로 진행 되므로 range(...)매개 변수 1 및 1001 :과 함께 함수를 사용하십시오 .range(1, 1001)range(start, end)


답변

파이썬 3에서 범위 를 사용하십시오 .

다음은 두 숫자에서 숫자 사이를 반환하는 함수 예제입니다.

def get_between_numbers(a, b):
    """
    This function will return in between numbers from two numbers.
    :param a:
    :param b:
    :return:
    """
    x = []
    if b < a:
        x.extend(range(b, a))
        x.append(a)
    else:
        x.extend(range(a, b))
        x.append(b)

    return x

결과

print(get_between_numbers(5, 9))
print(get_between_numbers(9, 5))

[5, 6, 7, 8, 9]
[5, 6, 7, 8, 9]