使用Python中的索引向后循环?

Joa*_*nge 254 python loops

我试图从100循环到0.我如何在Python中执行此操作?

for i in range (100,0) 不起作用.

0x6*_*015 357

试试range(100,-1,-1),第三个参数是要使用的增量(在此处记录).

  • 如果你不需要数字列表,你也可以使用xrange而不是range,但这是正确的答案. (5认同)
  • 什么是第二个论点? (3认同)
  • 此外,我需要使用它来删除集合中的项目,这就是为什么只需要索引. (2认同)
  • 第二个参数比最终值小一个.因此,如果你输入-1然后范围停在0,如果你输-5,范围停在-4(增量为-1) (2认同)

Tri*_*ych 185

在我看来,这是最可读的:

for i in reversed(xrange(101)):
    print i,
Run Code Online (Sandbox Code Playgroud)

  • 这比接受的答案更好,因为它实际上没有在内存中分配所有数字(在Python 3中,接受的答案也不会),而且更明显的是发生了什么. (12认同)
  • 2.6之前的Python确实会分配所有数字,因为reverse无法告诉xrange反向...(因为Python 2.6它调用__reversed __().) (5认同)
  • 在 Python 3 中,“range”的行为与 2.7 中“xrange”的行为相同。@hacksoi 取决于用例,但假设您在一个大缓冲区中向后迭代,假设它是 10 MB,那么预先创建反向索引将需要几秒钟并占用超过 50 MB 的内存。使用反向生成器需要几毫秒的时间,并且只占用几个字节的内存。 (5认同)
  • xrange() 在 Python 3 中不再可用 (2认同)

kcw*_*cwu 32

for i in range(100, -1, -1)
Run Code Online (Sandbox Code Playgroud)

和一些稍长(和较慢)的解决方案:

for i in reversed(range(101))

for i in range(101)[::-1]
Run Code Online (Sandbox Code Playgroud)


Bli*_*ixt 16

通常在Python中,您可以使用负数索引从后面开始:

numbers = [10, 20, 30, 40, 50]
for i in xrange(len(numbers)):
    print numbers[-i - 1]
Run Code Online (Sandbox Code Playgroud)

结果:

50
40
30
20
10
Run Code Online (Sandbox Code Playgroud)


myt*_*der 7

为什么您的代码不起作用

您的代码for i in range (100, 0)很好,除了

step默认情况下,第三个参数()是+1。因此,必须向range()指定第三个参数才能-1向后退一步。

for i in range(100, -1, -1):
    print(i)
Run Code Online (Sandbox Code Playgroud)

注意:这在输出中包括100&0。

有多种方法。

更好的方法

对于pythonic方式,请检查PEP 0322

这是Python3 pythonic示例,可从100打印到0(包括100和0)。

for i in reversed(range(101)):
    print(i)
Run Code Online (Sandbox Code Playgroud)


小智 5

另一个解决方案:

z = 10
for x in range (z):
   y = z-x
   print y
Run Code Online (Sandbox Code Playgroud)

结果:

10
9
8
7
6
5
4
3
2
1
Run Code Online (Sandbox Code Playgroud)

提示:如果您使用此方法对列表中的索引进行计数,则您希望从y值开始为-1,因为列表索引将从0开始。


eno*_*ted 5

解决您的问题的简单答案可能是这样的:

for i in range(100):
    k = 100 - i
    print(k)
Run Code Online (Sandbox Code Playgroud)