如何在Python中减去'for'循环计数器?

时间:2013-10-30 17:28:05

标签: python for-loop range

我所知道的Python中for循环的结构如下:

for i in range(10)

然后范围实际上是[0,1,2,3,4,5,6,7,9]。现在这里有一个问题,那就是我想通过放一行i-=1来减少我的循环计数器,但是这并没有显示我期望的结果。

以下示例是与while(True)中的for i in range(10): i-=1 print i 相同的结构。 Java和C,但是它在这里工作,循环中的计数器忽略了旨在减少它的行。

-1
0
1
2
3
4
5
6
7
8

它会生成输出:

for

我应该怎样做才能通过i=0 while(i<10): i-=1 print i i+=1 循环获得我想要的东西!我知道它可以很容易地完成如下:

-1

以下是Java代码示例,我希望看到无限循环打印import static java.lang.System.out; public class HelloWorld{ public static void main(String []args){ for(int i=0;i<10;i++) { i--; out.println(i); } } }

这是Java代码:

{{1}}

4 个答案:

答案 0 :(得分:4)

range函数有3个参数:start,stop和step:

for i in range(-1, 9):
  yield i

反过来

for i in range(10, 0, -1):
  yield i

查看documentation

修改

当然,没有什么可以阻止你直接使用range。因此map(print, range(10, 0, -1))会将它们全部打印到屏幕上,而range(10, 0, -1)会让您直接访问整数。

答案 1 :(得分:2)

你试图做的事情在python上不起作用的原因是因为range返回一个整数片段。

>> range(10) 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

并且for语句遍历切片的每个元素。以下是您尝试执行的内容:

for i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
    i = i - 1
    print i

答案 2 :(得分:2)

您不能像这样修改迭代器变量。这里的python更类似于foreach。

为了达到我认为你想要的行为,你应该这样做:

i = 0
while (i<10):
    i-=1
    print i
    i+=1

虽然与以下相比看起来有点傻:

while(True):
    print(-1)

答案 3 :(得分:0)

>>> [e for e in xrange(10, 0, -1)]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]