[python] 파이썬에서 목록을 역순으로 순회

그래서 시작 len(collection)하고 끝날 수 있습니다 collection[0].

또한 루프 인덱스에 액세스 할 수 있기를 원합니다.



답변

내장 reversed()기능을 사용하십시오 .

>>> a = ["foo", "bar", "baz"]
>>> for i in reversed(a):
...     print(i)
... 
baz
bar
foo

원래 색인에 액세스하려면 enumerate()목록에 다음을 전달하기 전에 사용 하십시오 reversed().

>>> for i, e in reversed(list(enumerate(a))):
...     print(i, e)
... 
2 baz
1 bar
0 foo

이후 enumerate()반환 발전기 및 발전기는 되돌릴 수 없습니다, 당신은으로 변환 할 필요가 list첫번째.


답변

넌 할 수있어:

for item in my_list[::-1]:
    print item

(또는 for 루프에서 수행하려는 모든 작업)

[::-1]슬라이스 for 루프의 목록을 반전 (실제로 목록 “영구적”을 수정하지 않습니다).


답변

루프 인덱스가 필요하고 전체 목록을 두 번 탐색하거나 추가 메모리를 사용하지 않으려면 생성기를 작성하십시오.

def reverse_enum(L):
   for index in reversed(xrange(len(L))):
      yield index, L[index]

L = ['foo', 'bar', 'bas']
for index, item in reverse_enum(L):
   print index, item


답변

다음과 같이 할 수 있습니다 :

범위 내 i의 경우 (len (collection) -1, -1, -1) :
    인쇄 수집 [i]

    파이썬 3에 대한 # print (collection [i])

그래서 당신의 추측은 꽤 가까웠습니다 🙂 약간 어색하지만 기본적으로 말합니다 : 1 미만으로 시작하고 len(collection)-1 바로 전에 -1 단계까지 갈 때까지 계속하십시오.

참고로, help함수는 파이썬 콘솔에서 무언가에 대한 문서를 볼 수 있기 때문에 매우 유용합니다.

help(range)


답변

reversed내장 기능이 편리합니다 :

for item in reversed(sequence):

문서 반전을위한 그것의 한계를 설명합니다.

인덱스와 함께 시퀀스를 거꾸로 걸어야하는 경우 (예 : 시퀀스 길이를 변경하는 내부 수정의 경우)이 함수에 내 codeutil 모듈을 정의했습니다.

import itertools
def reversed_enumerate(sequence):
    return itertools.izip(
        reversed(xrange(len(sequence))),
        reversed(sequence),
    )

이것은 시퀀스의 사본을 생성하지 않습니다. 분명히, reversed여전히 제한 사항이 적용됩니다.


답변

새 목록을 다시 만들지 않고 색인을 생성하면 어떨까요?

>>> foo = ['1a','2b','3c','4d']
>>> for i in range(len(foo)):
...     print foo[-(i+1)]
...
4d
3c
2b
1a
>>>

또는

>>> length = len(foo)
>>> for i in range(length):
...     print foo[length-i-1]
...
4d
3c
2b
1a
>>>


답변

>>> l = ["a","b","c","d"]
>>> l.reverse()
>>> l
['d', 'c', 'b', 'a']

또는

>>> print l[::-1]
['d', 'c', 'b', 'a']