Python 2.6의 반복기에서 마지막 항목을 가져 오는 가장 좋은 방법은 무엇입니까? 예를 들어
my_iter = iter(range(5))
지고의 짧은 코드 / 깨끗한 방법은 무엇입니까 4
에서는 my_iter
?
나는 이것을 할 수 있지만 그것은 매우 효율적이지 않은 것 같습니다.
[x for x in my_iter][-1]
답변
item = defaultvalue
for item in my_iter:
pass
답변
deque
크기 1을 사용하십시오 .
from collections import deque
#aa is an interator
aa = iter('apple')
dd = deque(aa, maxlen=1)
last_element = dd.pop()
답변
Python 3.x를 사용하는 경우 :
*_, last = iterator # for a better understanding check PEP 448
print(last)
Python 2.7을 사용하는 경우 :
last = next(iterator)
for last in iterator:
continue
print last
참고 :
일반적으로 위에 제시된 솔루션은 일반적인 경우에 필요한 것이지만 대용량 데이터를 처리하는 경우 deque
크기 1 을 사용하는 것이 더 효율적 입니다. ( source )
from collections import deque
#aa is an interator
aa = iter('apple')
dd = deque(aa, maxlen=1)
last_element = dd.pop()
답변
__reversed__
가능한 경우 사용할 가치가 있을 것입니다.
if hasattr(my_iter,'__reversed__'):
last = next(reversed(my_iter))
else:
for last in my_iter:
pass
답변
다음과 같이 간단합니다.
max(enumerate(the_iter))[1]
답변
이것은 람다로 인해 빈 for 루프보다 빠를 것 같지 않지만 다른 사람에게 아이디어를 줄 수 있습니다.
reduce(lambda x,y:y,my_iter)
iter가 비어 있으면 TypeError가 발생합니다.
답변
이거 있어요
list( the_iter )[-1]
반복의 길이가 정말 대단하다면 (너무 길어서 목록을 구체화하면 메모리가 고갈 될 것입니다) 디자인을 다시 생각해야합니다.
