-1

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

for i in range(10)

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

下面的例子是一个与Java和C相同的结构while(True),但在这里它可以工作并且循环中的计数器忽略了旨在减少它的行。

for i in range(10):
    i-=1
    print i

它生成输出:

-1
0
1
2
3
4
5
6
7
8

我应该怎么做才能得到我想要的for循环!我知道它可以通过一段时间轻松完成,如下所示:

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

这里以 Java 代码为例,我希望看到一个无限循环打印-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);
            }
         }
    }
4

4 回答 4

4

range函数接受 3 个参数:start、stop 和 step:

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

逆向而行

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

看看文档

编辑:

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

于 2013-10-30T17:31:24.070 回答
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
于 2013-10-30T17:33:23.743 回答
2

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

为了实现我假设你想要的行为,你应该这样做:

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

尽管与以下相比,它看起来有点傻:

while(True):
    print(-1)
于 2013-10-30T17:37:23.683 回答
0
>>> [e for e in xrange(10, 0, -1)]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
于 2013-10-30T17:33:55.817 回答