[python] Python 반복기에서 마지막 항목을 가져 오는 가장 깨끗한 방법

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]

반복의 길이가 정말 대단하다면 (너무 길어서 목록을 구체화하면 메모리가 고갈 될 것입니다) 디자인을 다시 생각해야합니다.