복붙노트

[PYTHON] Python range () 및 zip () 객체 유형

PYTHON

Python range () 및 zip () 객체 유형

range () 및 zip () 같은 함수를 for 루프에서 사용하는 방법을 이해합니다. 그러나 나는 range ()가리스트를 출력 할 것으로 기대했다. 유닉스 쉘의 seq와 비슷하다. 다음 코드를 실행하면 :

a=range(10)
print(a)

결과는 범위 (10)로 목록이 아니라 다른 유형의 객체임을 나타냅니다. zip ()은 인쇄 할 때 비슷한 동작을합니다.

<zip object at "hexadecimal number">

그래서 내 질문은 무엇이고, 그것들을 만드는 데 어떤 이점이 있으며, 루핑하지 않고리스트에 출력을 얻으려면 어떻게해야합니까?

해결법

  1. ==============================

    1.파이썬 3을 사용해야합니다.

    파이썬 3을 사용해야합니다.

    Python 2에서 zip과 range 객체는 제안 할 때처럼 동작하여 목록을 반환합니다. 그것들은 전체 목록을 메모리로 확장하지 않고 필요에 따라 요소를 생성하는 생성기와 유사한 객체로 변경되었습니다. 한 가지 이점은 일반적인 사용 사례 (예 : 반복 사용)에서 효율성이 더 컸다는 점입니다.

    "게으른"버전은 Python 2.x에도 존재하지만 xrange와 itertools.izip과 같은 다른 이름을 가지고 있습니다.

    모든 출력을 익숙한 목록 객체로 한 번에 가져 오려면 list를 호출하여 내용을 반복하고 소비합니다.

    >>> list(range(3))
    [0, 1, 2]
    >>> list(zip(range(3), 'abc'))
    [(0, 'a'), (1, 'b'), (2, 'c')]
    
  2. ==============================

    2.파이썬 3.x에서, range는 파이썬 2.x에서했던 것처럼 범위 객체 대신리스트를 반환합니다. 마찬가지로 zip은 이제 목록 대신 zip 객체를 반환합니다.

    파이썬 3.x에서, range는 파이썬 2.x에서했던 것처럼 범위 객체 대신리스트를 반환합니다. 마찬가지로 zip은 이제 목록 대신 zip 객체를 반환합니다.

    이러한 객체를 목록으로 가져 오려면 목록에 넣으십시오.

    >>> range(10)
    range(0, 10)
    >>> list(range(10))
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> zip('abc', 'abc')
    <zip object at 0x01DB7120>
    >>> list(zip('abc', 'abc'))
    [('a', 'a'), ('b', 'b'), ('c', 'c')]
    >>>
    

    처음에는 도움이 안되는 것처럼 보이지만 범위와 지퍼의 동작이 변경되면 실제로 효율성이 향상됩니다. 이는 zip 및 range 객체가 필요한 모든 항목을 한꺼번에 보관할 목록을 만드는 대신 생성하기 때문입니다. 그렇게하면 메모리 소비가 줄어들고 작동 속도가 향상됩니다.

  3. ==============================

    3.Range (xrange in python 2. *) 객체는 불변의 시퀀스이고, zip (itertools.izip repectively)은 생성자 객체입니다. 생성기 또는 시퀀스에서 목록을 만들려면 목록에 캐스트하면됩니다. 예 :

    Range (xrange in python 2. *) 객체는 불변의 시퀀스이고, zip (itertools.izip repectively)은 생성자 객체입니다. 생성기 또는 시퀀스에서 목록을 만들려면 목록에 캐스트하면됩니다. 예 :

    >>> x = range(10) 
    >>> list(x)
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    그러나 요소가 어떻게 생성되는지는 다릅니다. 일반 생성자는 반복 가능하다면 변경 가능하고 범위는 변경 가능하지만 내용은 변경되지 않으며 다음과 같지 않습니다.

    >>> list(x) # x is a range-object
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # second cast to list, contents is the same
    >>> y = zip('abc', 'abc')
    >>> list(y) # y is a generator
    [('a', 'a'), ('b', 'b'), ('c', 'c')]
    >>> list(y) 
    [] # second cast to list, content is empty!
    
  4. from https://stackoverflow.com/questions/19777612/python-range-and-zip-object-type by cc-by-sa and MIT license