ฉันพยายามวนจาก 100 เป็น 0 ฉันจะทำสิ่งนี้ใน Python ได้อย่างไร
for i in range (100,0)
ไม่ทำงาน
range(100)[::-1]
(ซึ่งแปลโดยอัตโนมัติเป็นrange(9, -1, -1)
) - ทดสอบใน python 3.7
ฉันพยายามวนจาก 100 เป็น 0 ฉันจะทำสิ่งนี้ใน Python ได้อย่างไร
for i in range (100,0)
ไม่ทำงาน
range(100)[::-1]
(ซึ่งแปลโดยอัตโนมัติเป็นrange(9, -1, -1)
) - ทดสอบใน python 3.7
คำตอบ:
ลองใช้range(100,-1,-1)
อาร์กิวเมนต์ที่ 3 เป็นการเพิ่มขึ้นเพื่อใช้ (บันทึกไว้ที่นี่ )
(ตัวเลือก "ช่วง" เริ่มต้นหยุดขั้นตอนมีการบันทึกไว้ที่นี่ )
ในความคิดของฉันนี้เป็นอ่านมากที่สุด:
for i in reversed(xrange(101)):
print i,
reversed(xrange(len(list)))
จะxrange(len(list)-1:-1:-1)
; หลังเพียงแค่รูปลักษณ์ที่แปลกมีจำนวนมากดังนั้น-1
's
range
ทำงานแบบเดียวกับxrange
2.7 @hacksoi ขึ้นอยู่กับกรณีการใช้งาน แต่สมมติว่าคุณกำลังวนซ้ำแบบย้อนกลับในบัฟเฟอร์ขนาดใหญ่สมมติว่ามันคือ 10 MB จากนั้นการสร้างดัชนีย้อนกลับล่วงหน้าจะใช้เวลาไม่กี่วินาทีและใช้หน่วยความจำมากกว่า 50 MB การใช้ตัวสร้างที่กลับด้านจะใช้เวลามิลลิวินาทีและใช้หน่วยความจำไม่กี่ไบต์เท่านั้น
for i in range(100, -1, -1)
และโซลูชันที่ยาวขึ้นเล็กน้อย (และช้ากว่า):
for i in reversed(range(101))
for i in range(101)[::-1]
โดยทั่วไปใน Python คุณสามารถใช้ดัชนีลบเพื่อเริ่มต้นจากด้านหลัง:
numbers = [10, 20, 30, 40, 50]
for i in xrange(len(numbers)):
print numbers[-i - 1]
ผลลัพธ์:
50
40
30
20
10
ทำไมรหัสของคุณใช้งานไม่ได้
คุณใช้รหัสfor i in range (100, 0)
ได้ดียกเว้น
พารามิเตอร์ที่สาม ( step
) +1
เป็นค่าเริ่มต้น ดังนั้นคุณต้องระบุพารามิเตอร์ที่ 3 ถึง range () -1
เพื่อย้อนกลับ
for i in range(100, -1, -1):
print(i)
หมายเหตุ: นี่รวม 100 & 0 ในผลลัพธ์
มีหลายวิธี
ทางที่ดีกว่า
หาวิธี pythonic ตรวจสอบPEP 0322
นี่คือตัวอย่างของ Python3 pythonic ที่จะพิมพ์จาก 100 เป็น 0 (รวมถึง 100 & 0)
for i in reversed(range(101)):
print(i)
reversed
ใน PEP-322 เป็นความเข้าใจผิดดังนั้นจึงควรจะตั้งข้อสังเกตว่าreversed
จะเรียก__reversed__
ใน iterable และกลับผลและสำหรับrange
วัตถุนี้เป็นการประเมินขี้เกียจrange_object
iterator กล่าวโดยย่อ: การใช้วิธีนี้ยังเป็นการประเมินผลที่ขี้เกียจ
ทางออกอื่น:
z = 10
for x in range (z):
y = z-x
print y
ผลลัพธ์:
10
9
8
7
6
5
4
3
2
1
เคล็ดลับ: หากคุณใช้วิธีนี้เพื่อนับดัชนีย้อนกลับในรายการคุณจะต้อง -1 จากค่า 'y' เนื่องจากดัชนีรายการของคุณจะเริ่มต้นที่ 0
คำตอบง่ายๆในการแก้ปัญหาของคุณอาจเป็นเช่นนี้:
for i in range(100):
k = 100 - i
print(k)
for var in range(10,-1,-1)
โรงงาน
สั้นและหวาน นี่เป็นวิธีการแก้ปัญหาของฉันเมื่อทำหลักสูตรรหัสวิชา พิมพ์สตริงตามลำดับรอบ
def reverse(text):
string = ""
for i in range(len(text)-1,-1,-1):
string += text[i]
return string
คุณสามารถทำช่วงที่เพิ่มขึ้นและลบออกจากตัวแปรในกรณีของคุณที่ 100 - i
i in range( 0, 101 )
for i in range( 0, 101 ):
print 100 - i
ฉันลองสิ่งนี้ในหนึ่งในแบบฝึกหัด codeacademy (การย้อนตัวอักษรในสตริงโดยไม่ใช้ reverse หรือ :: -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')
ฉันต้องการวนซ้ำสองรายการย้อนหลังในเวลาเดียวกันดังนั้นฉันต้องการดัชนีเชิงลบ นี่คือทางออกของฉัน:
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
ไม่เกี่ยวข้องกับคำถาม inital
คุณยังสามารถสร้างกลไกการย้อนกลับที่กำหนดเองในหลาม ซึ่งสามารถใช้งานได้ทุกที่ในการวนซ้ำด้านหลัง
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
นี่คือสิ้นเปลืองและไม่เป็นไปได้ขนาดใหญ่