반복자를리스트로 변환하는 가장 빠른 방법


185

갖는 iterator객체를 반복자에 의해 반환 된 객체의 목록을 얻으려면, 더 이상 정확한 지능형리스트보다 뭔가 더 빠르다?

user_list = [user for user in user_iterator]

1
이를 최적화하기 전에 이것이 실제로 병목 현상임을 증명하기 위해 프로파일 링을 수행했는지 확인하십시오.
S.Lott

1
@ S.Lott. 나는 일반적으로 그 태도에 동의하지만,이 경우에는 종종 파이썬에서와 같이 속도에 맞게 최적화 할 때 문체 적으로 최적화해야합니다.
aaronasterling

3
OP는 병목 현상이 없다고 말했습니다. 간단한 답변으로 완벽하게 훌륭한 일반적인 질문이며 프로파일 러를 통해 실행할 수있는 특정 응용 프로그램에 의존 할 필요가 없습니다.
Ken Williams

4
가장 간단한 방법은 [*iterator]입니다.
Challenger5

답변:


336
list(your_iterator)

5
사실, 거의 항상 조금 더 빠릅니다. 또한 훨씬 더 분명합니다.
토마스 Wouters

8
@systempuntoout 완전히 C로 실행됩니다. 목록 이해는 파이썬입니다. 물론 더 빠릅니다.
aaronasterling

3
나는 여전히 파이썬에 더 좋은 방법이 없다는 것을 완전히 싫어합니다. 식의 슬라이스 또는 인덱스를 만들 수 있도록 식의 양쪽을 편집해야하는 것은 지루합니다. (python3에서 zip과 같은 순수한 표현이거나 순수한 함수로 매핑되는 경우 매우 흔함)
Jo So

흠. import matplotlib.pyplot as plt' followed by ax = plt.gca ()`이며 list(ax._get_lines.prop_cycler)무한 루프가 발생합니다. 이것을 처리하는 우아한 방법이 있습니까?
Jens Munk

5
내 빠른 테스트에서 [*your_iterator]약 2 배 빠른 것으로 나타났습니다 list(your_iterator). 이것은 일반적으로 사실입니까, 아니면 특정 사건입니까? (나는 map반복자로 사용했다 .)
Neinstein

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.