我是新來的python。有沒有類似的方式來編寫這個C for循環與Python中的2個變量?Python:C for循環與兩個變量
for (i = 0, j = 20; i != j; i++, j--) { ... }
我是新來的python。有沒有類似的方式來編寫這個C for循環與Python中的2個變量?Python:C for循環與兩個變量
for (i = 0, j = 20; i != j; i++, j--) { ... }
根據不同的情況下,你可以使用壓縮:
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
這會給你增加值和減少值。
>>> 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解釋器(外殼,如果你願意),或周圍的Python解釋器像bpython的包裝。我真的推薦使用bpython來測試這樣的代碼。
的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
您可以使用壓縮,但對於第二個變量的循環並不是真的必要的,所以需要一個簡單得多的方法:
for i in range(10):
j = 20 - i
⋮
簡而言之:不是真的。python中的'for'是用於遍歷可迭代的東西,while'while'用你想要的類似'for'做的變量來做(注意C中'for'是如何縮短'while'因此相當多餘)。 – TNW 2013-04-20 01:57:55