Tôi đang cố gắng lặp từ 100 đến 0. Làm thế nào để tôi làm điều này trong Python?
for i in range (100,0)
không hoạt động.
range(100)[::-1]
(được dịch tự động sang range(9, -1, -1)
) - Đã thử nghiệm trong python 3.7
Tôi đang cố gắng lặp từ 100 đến 0. Làm thế nào để tôi làm điều này trong Python?
for i in range (100,0)
không hoạt động.
range(100)[::-1]
(được dịch tự động sang range(9, -1, -1)
) - Đã thử nghiệm trong python 3.7
Câu trả lời:
Hãy thử range(100,-1,-1)
, đối số thứ 3 là mức tăng để sử dụng (tài liệu ở đây ).
(Tùy chọn "phạm vi", bắt đầu, dừng, bước được ghi lại ở đây )
Theo tôi, đây là thứ dễ đọc nhất:
for i in reversed(xrange(101)):
print i,
reversed(xrange(len(list)))
để xrange(len(list)-1:-1:-1)
; cái sau trông có vẻ kỳ lạ với rất nhiều -1
.
range
hành xử giống như xrange
trong 2.7. @hacksoi tùy thuộc vào trường hợp sử dụng, nhưng giả sử bạn đang lặp lại trong một bộ đệm lớn, giả sử là 10 MB, sau đó tạo các chỉ số ngược trước sẽ mất vài giây và sử dụng hơn 50 MB bộ nhớ. Sử dụng một trình tạo đảo ngược sẽ mất một phần nghìn giây và chỉ sử dụng một vài byte bộ nhớ.
Tại sao mã của bạn không hoạt động
Mã của bạn for i in range (100, 0)
là tốt, ngoại trừ
tham số thứ ba ( step
) theo mặc định +1
. Vì vậy, bạn phải chỉ định tham số thứ 3 cho phạm vi () là -1
bước lùi.
for i in range(100, -1, -1):
print(i)
LƯU Ý: Điều này bao gồm 100 & 0 ở đầu ra.
Có nhiều cách.
Cách tốt hơn
Đối với cách pythonic, kiểm tra PEP 0322 .
Đây là ví dụ pythonic của Python3 để in từ 100 đến 0 (bao gồm 100 & 0).
for i in reversed(range(101)):
print(i)
reversed
trong PEP-322 là sai lệch, do đó, cần lưu ý rằng reversed
sẽ gọi __reversed__
vào vòng lặp và trả về kết quả, và đối với range
các đối tượng, đây là range_object
trình lặp được đánh giá lười biếng . Tóm lại: sử dụng phương pháp này vẫn lười đánh giá.
Câu trả lời đơn giản để giải quyết vấn đề của bạn có thể như thế này:
for i in range(100):
k = 100 - i
print(k)
for var in range(10,-1,-1)
làm
Tôi đã thử điều này trong một trong các bài tập về codeacademy (đảo ngược ký tự trong chuỗi mà không sử dụng đảo ngược cũng không :: -1)
def reverse(text):
chars= []
l = len(text)
last = l-1
for i in range (l):
chars.append(text[last])
last-=1
result= ""
for c in chars:
result += c
return result
print reverse('hola')
Tôi muốn lặp qua hai danh sách ngược cùng một lúc nên tôi cần chỉ số âm. Đây là giải pháp của tôi:
a= [1,3,4,5,2]
for i in range(-1, -len(a), -1):
print(i, a[i])
Kết quả:
-1 2
-2 5
-3 4
-4 3
-5 1
Oh okay đọc câu hỏi sai, tôi đoán đó là về việc lạc hậu trong một mảng? nếu vậy, tôi có cái này:
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
và time
không liên quan đến câu hỏi bẩm sinh.
Bạn cũng có thể tạo một cơ chế đảo ngược tùy chỉnh trong python. Mà có thể được sử dụng bất cứ nơi nào để lặp lại một vòng lặp ngược
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
sẽ không cần lưu trữ toàn bộ danh sách trong bộ nhớ, phải không? Điều này là lãng phí và không khả thi cho lớn a
.