답변:
제 생각에는 이것이 가장 읽기 쉬운 것입니다.
for i in reversed(xrange(101)):
print i,
reversed(xrange(len(list)))
한다 xrange(len(list)-1:-1:-1)
; 후자는 너무 많은 것으로 이상하게 보입니다 -1
.
range
와 동일한 방식으로 작동합니다 xrange
. @hacksoi는 사용 사례에 따라 다르지만 큰 버퍼에서 거꾸로 반복한다고 가정하고 10MB라고 가정하고 앞뒤로 색인을 만드는 데 몇 초가 걸리고 50MB 이상의 메모리를 사용한다고 가정 해 봅시다. 리버스 된 생성기를 사용하는 데는 밀리 초가 걸리며 몇 바이트의 메모리 만 사용합니다.
코드가 작동하지 않는 이유
당신은 코드 for i in range (100, 0)
를 제외하고 는 괜찮습니다.
세 번째 매개 변수 ( step
)는 기본적으로 +1
입니다. 따라서 -1
뒤로 단계 로 이동 하려면 range ()에 세 번째 매개 변수를 지정해야 합니다.
for i in range(100, -1, -1):
print(i)
참고 : 여기에는 출력에 100 & 0이 포함됩니다.
여러 가지 방법이 있습니다.
더 좋은 방법
파이썬 방식의 경우 PEP 0322를 확인하십시오 .
이것은 100에서 0까지 인쇄하는 Python3 pythonic 예제입니다 (100 및 0 포함).
for i in reversed(range(101)):
print(i)
reversed
PEP-322에서 구현하는 방법에 대한 권장 사항 은 오해의 소지가 있으므로 iterable reversed
을 호출 __reversed__
하고 결과를 반환 한다는 점에 유의해야하며 range
객체의 경우 게으른 평가 range_object
반복기입니다. 한마디로 :이 방법을 사용하는 것은 여전히 게으른 평가입니다.
두 목록을 동시에 뒤로 반복하고 싶었으므로 음수 색인이 필요했습니다. 이것은 내 솔루션입니다.
a= [1,3,4,5,2]
for i in range(-1, -len(a), -1):
print(i, a[i])
결과:
-1 2
-2 5
-3 4
-4 3
-5 1
오 알았어. 질문을 잘못 읽으면 배열에서 뒤로 이동하는 것 같아? 그렇다면, 나는 이것을 가지고 있습니다 :
array = ["ty", "rogers", "smith", "davis", "tony", "jack", "john", "jill", "harry", "tom", "jane", "hilary", "jackson", "andrew", "george", "rachel"]
counter = 0
for loop in range(len(array)):
if loop <= len(array):
counter = -1
reverseEngineering = loop + counter
print(array[reverseEngineering])
global
과 time
관련이 없습니다.
파이썬에서 커스텀 리버스 메커니즘을 만들 수도 있습니다. iterable을 뒤로 반복하기 위해 어디서나 사용할 수 있습니다.
class Reverse:
"""Iterator for looping over a sequence backwards"""
def __init__(self, seq):
self.seq = seq
self.index = len(seq)
def __iter__(self):
return self
def __next__(self):
if self.index == 0:
raise StopIteration
self.index -= 1
return self.seq[self.index]
>>> d = [1,2,3,4,5]
>>> for i in Reverse(d):
... print(i)
...
5
4
3
2
1
a = 10
for i in sorted(range(a), reverse=True):
print i
sorted
하면 불필요하게 전체 목록을 메모리에 저장 한다는 것을 알고 있습니까? 이것은 낭비이며, 큰 것은 불가능합니다 a
.