Python:带有两个变量的C for循环

时间:2013-04-20 01:52:54

标签: python c

我是python的新手。有没有类似的方法在python中用2个变量编写这个C for循环?

for (i = 0, j = 20; i != j; i++, j--) { ... }

4 个答案:

答案 0 :(得分:7)

Python 2.x

from itertools import izip, count
for i, j in izip(count(0, 1), count(20, -1)):
    if i == j: break
    # do stuff

Python 3.x:

from itertools import count
for i, j in zip(count(0, 1), count(20, -1)):
    if i == j: break
    # do stuff

这使用itertools.count(),一个无限期地从某个起点迭代的迭代器:

  

itertools.count(start=0, step=1)

     

创建一个迭代器,返回以n开头的均匀间隔值。通常用作imap()的参数来生成连续的数据点。此外,与izip()一起使用以添加序列号。

在Python 2.x中你必须使用izip因为Py2K zip尝试创建所有结果的列表,而不是izip返回iterator获得结果。不幸的是我们在这里处理无限迭代器,所以zip将不起作用...这可能是一个很好的观点,为什么zip被更改为在Py3K中执行izip的角色(izip不再存在)。

如果你为功能性而疯狂,你甚至可以做到这一点(但在我看来它看起来很难看,因为我已经厌倦了lambda s):

from itertools import takewhile, izip, count
for i, j in takewhile(lambda x: x[0] != x[1], izip(count(0, 1), count(20, -1))):
    # do stuff

答案 1 :(得分:4)

>>> i, j = 0, 10
>>> while i != j:
...     # Your code here:
...     print "i: %d j: %d" % (i, j)
...     i += 1
...     j -= 1
...
...
i: 0 j: 10
i: 1 j: 9
i: 2 j: 8
i: 3 j: 7
i: 4 j: 6

如果你想知道为什么在代码示例中看到>>>...是很常见的,因为人们正在使用python解释器(如果你愿意,可以使用shell),或者是python周围的包装器像bpython这样的翻译。我真的建议让bpython来测试这样的代码。

答案 2 :(得分:1)

根据具体情况,您可以使用zip:

 lista = [1,2,3]
 listb = [4,5,6]
 for x,y in zip(lista, listb)
      print(x, y)

输出:

 1 4
 2 5
 3 6

zip文档在这里:http://docs.python.org/3.3/library/functions.html#zip

另外,如果你要说两个数字,你可以做

for x,y in zip(range(0), range(10, 0, -1))
    if x == y:
        break
    # do stuff

这将为您提供增加和减少的值。

答案 3 :(得分:1)

你可以使用zip,但对于手头的问题,循环第二个变量并不是必需的,因此需要采用更简单的方法:

for i in range(10):
    j = 20 - i
    ⋮