그래서 시작 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']