itertools.izip
대신 zip
을 사용하는 것이 더 좋은 경우는 언제입니까?izip 대신 zip을 사용하는 것이 더 좋은가요?
답변
전체 목록의 목록이 생성되기를 원할 때 (예 : 해당 목록을 수정하는 함수에 전달하기 위해). 또는 전달하려는 인수를 zip()
에 강제로 적용하려면 특정 시점에서 완전히 평가되어야합니다.
튜플을 재사용하고 izip을 사용하지 않을 실제 이유가 없으므로 첫 번째 경우에 izip을 더 빨리 사용하는 것이 더 좋지 않겠습니까? – user1815201
@ user1815201 :'izip'은'tuple'이 다음 반복이 시작되기 전에 해제 된 경우에만'tuple'을 재사용하므로 아무 것도 얻을 수 없습니다. 즉, 모든 손실은 너무 작습니다. 그래서'izip'을 독점적으로 사용하지 않을 이유가 거의 없다는 것에 동의합니다.'list'가 필요한 경우'list'로 래핑됩니다. Python 코드에'future_builtins import zip'을 추가하여 실제로''zip'을'izip' (Py3 변환 준비)으로 만들면 실제로 "적절한"방법이 될 수 있습니다. – ShadowRanger
2.x에서는 에이 필요하며 반복기 대신 목록이 필요합니다.
그 일이 일어날 수있는 예를 들어 주시겠습니까? –
아닙니다. 그래서 나는 itertools.izip()을 선호하는 경향이 있는데, 이득이 순전히 통계적 일 때를 제외하고. –
목록이 필요한 경우 색인으로 결과 항목에 액세스하거나 전체 길이를 찾아야 할 때입니다. 'lst = zip (lst_a, lst_b)'는'lst [1]'또는'len (lst)'를 허용합니다. 그러나,'ilst = itertools.izip (lst_a, lst_n)'에 대해서'ilst [1]'또는'len (ilst)'를 시도하는 것은 실패 할 것입니다. –
zip
은 모든 목록을 동시에 계산하므로 izip
은 요청할 때만 요소를 계산합니다.
>>> l1 = [1, 2, 3, 4, 5, 6]
>>> l2 = [2, 3, 4, 5, 6, 7]
>>> z = zip(l1, l2)
>>> iz = izip(l1, l2)
>>> isinstance(zip(l1, l2), list)
True
>>> isinstance(izip(l1, l2), list)
False
>>> z[::2] #Get odd places
[(1, 2), (3, 4), (5, 6)]
>>> iz[::2] #Same with izip
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'itertools.izip' object is unsubscriptable
:
한 가지 중요한 차이는 'izip'은 목록이 아닙니다 (예 : 인덱싱) 목록 - 특정 기능을 지원하지 않는 'izip 객체를'반환 '지퍼'실제 목록을 반환한다는 것입니다
목록이 필요한 경우 (목록과 같은 객체가 아닌 경우) '우편 번호'만 사용하십시오.
'izip'은 메모리 또는주기 저장에 유용 할 수 있습니다.
예. 다음 코드는 몇 사이클 이후에 종료 될 수 있습니다, 그래서 통합 목록의 모든 항목을 계산할 필요가 없습니다 : zip
를 사용
lst_a = ... #list with very large number of items
lst_b = ... #list with very large number of items
#At each cycle, the next couple is provided
for a, b in izip(lst_a, lst_b):
if a == b:
break
print a
모든(a, b)
커플주기를 입력하기 전에 을 계산 한 것입니다.
또한 lst_a
및 lst_b
이 매우 큰 경우 (예 : 수백만 개의 레코드) zip(a, b)
은 두 번째로 세 번째 목록을 작성합니다.
하지만 작은 목록이있는 경우 zip
이 빠릅니다.
감사합니다. 그러나 이것은 주로'izip'이'zip'보다 나은 때 대답합니다 ... –
당신 말이 맞아요. 나는 좋은 의도로 시작한 다음 이론적 인 내용으로 떨어졌습니다 ... – Don
itertools 라이브러리는 일반적인 Python 기능을위한 "반복자"를 제공합니다. itertools 문서에서 "목록 대신 반복자를 반환한다는 점을 제외하면 zip()과 유사합니다." izip()의 I는 "반복자"를 의미합니다.
파이썬 이터레이터는 정기적 인 메모리 목록보다 메모리를 절약하는 "지연로드"시퀀스입니다. 따라서 두 입력 a, b가 너무 커서 한 번에 메모리에 보관할 수없는 경우 itertools.izip (a, b)를 사용합니다.
효율적으로 순차 처리와 관련된 파이썬 개념 찾기 : 지적 여전히 가치가 아직 zip``찬성
"generators" & "yield"
"iterators"
"lazy loading"
멋지게 설명했습니다. –
- 1. "OrElse"보다 "Or"를 사용하는 것이 더 좋은가요?
- 2. MySQL과 Neo4j를 함께 사용하는 것이 좋은가요?
- 3. 팝업 텍스트 대신 Sprites 대신 Labels를 사용하는 것이 더 낫습니다.
- 4. 익명 형식은 LINQ 외부에서 사용하는 것이 좋은가요?
- 5. PHP에서 참조로 패스를 사용하는 것이 좋은가요?
- 6. ASIHTTPRequest 라이브러리에 three20을 사용하는 것이 좋은가요?
- 7. 언어를 사용하는 대신 시스템의 기능을 사용하는 것이 더 좋을까요?
- 8. 데이터 바인딩 대신 DataTrigger를 사용하는 것이 더 좋습니까?
- 9. 데비안 또는 우분투 중 어느 것이 더 개발하기 좋은가요?
- 10. Http와 같은 텍스트 대신 바이너리 기반으로 사용자 정의 나머지 프로토콜을 사용하는 것이 좋은가요?
- 11. @ 전에 문자열을 사용하는 것이 더 나은가요?
- 12. 파이썬 클로저가`__all__`을 대신 할 좋은가요?
- 13. 조건부 절에 루비 스타일을 할당하는 것이 좋은가요?
- 14. 위임 메서드를 사용하는 대신 NSURLConnection을 사용하여 인증을 수행하는 것이 더 빠르고 더 나은 방법입니까?
- 15. ViewModels 대신 ViewData를 사용하는 것이 언제 올바른가요?
- 16. SOA, 메소드를 서비스로 공개하는 것이 좋은가요?
- 17. Powershell에서()을 처리하지 않는 것이 얼마나 좋은가요?
- 18. 짹짹이 긁기 - 사이트 또는 API를 사용하는 것이 더 좋습니까?
- 19. List 또는 Collection을 사용하는 것이 더 좋습니까?
- 20. 이 경우 CFMutableArrayRef를 사용하는 것이 더 지능적입니까?
- 21. 항상 ASP 제어를 사용하는 것이 더 좋습니까?
- 22. 자바에서 배열보다 벡터를 사용하는 것이 더 좋은가?
- 23. Windows Forms에서 WPF를 사용하는 것이 더 좋습니까?
- 24. 언제 C++ 템플릿을 사용하는 것이 더 낫습니까?
- 25. 정규식을 사용하는 것이 더 나은 사례는 무엇입니까?
- 26. 어느 것이 목록 항목에 사용하는 것이 더 낫습니까?
- 27. mergesort가 연결된 목록에 비해 왜 더 좋은가요?
- 28. 더 좋은가요? 암호화 -> AES. PRNG -> Blum Blum Shub?
- 29. 정수를 루프 카운터 변수로 사용하는 것이 더 좋습니까?
- 30. filter_input()을 사용하는 것이 더 나은 이유는 무엇입니까?
이유 중 하나는, 너무 명백한, izip'는'iterator'을 반환'이다하는 수 한 번만 횡단합니다. ie 'ii = izip (a, b); f (ii); g (ii)', 여기 빈리스트'[] '가'g'에 전달됩니다. – Causality