는이 같은 필기구 고민하고있다 : 나는 목록에 그것들을 소비하도록 강요하고 있기 때문에발전기를 반대로받지 않은 이유는 무엇입니까?
list(reversed(list(el.iterancestors()))) + [1,2,3]
발전기, 빨아 곳.
이것을 단순화하는 방법이 있습니까? 나는 reversed()
이 반복자를 받아 들여야한다고 생각하는데, 틀린가?
는이 같은 필기구 고민하고있다 : 나는 목록에 그것들을 소비하도록 강요하고 있기 때문에발전기를 반대로받지 않은 이유는 무엇입니까?
list(reversed(list(el.iterancestors()))) + [1,2,3]
발전기, 빨아 곳.
이것을 단순화하는 방법이 있습니까? 나는 reversed()
이 반복자를 받아 들여야한다고 생각하는데, 틀린가?
발전기는 마지막 항목을 보유 할 수 없으므로 되돌릴 수 없습니다. 다음의 결과는 무엇입니까? reversed()
의 포인트가메모리 효율적이다
from itertools import permutations
reversed(permutations('abcdefghijklmnopqrstuvwxyz', 10)) # 19,275,223,968,000 tuples
참고 :
from itertools import cycle
reversed(cycle('abc'))
실수로 모든 메모리를 먹는의 위험이있다. 시퀀스의 경우 색인 (목록, 문자열, 튜플, 범위)이있는 객체 인 reversed()
은 내부 색인을 사용하는 반복자를 생성합니다. 내부 색인은 len(inputobject) - 1
에서 시작하고 반복 할 때 0
으로 진행됩니다. 그런 식으로 입력 시퀀스의 복사본을 만들 필요는 없지만이 트릭은 이미 길이가 있고 무작위 액세스를 지원하는 무언가에서만 작동 할 수 있습니다.
귀하의 경우를 들어 어쨌든 reversed()
사용하지 것입니다. 당신은 출력되지 발전기 등의 목록을 원하는, 그래서 대신 목록을 반대로 슬라이스를 사용 : 새 목록 개체를 구축으로
list(el.iterancestors())[::-1] + [1, 2, 3]
메모리 효율이 여기에 문제가되지 않습니다.