2013-04-20 120 views
3

我是新來的python。有沒有類似的方式來編寫這個C for循環與Python中的2個變量?Python:C for循環與兩個變量

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

簡而言之:不是真的。python中的'for'是用於遍歷可迭代的東西,while'while'用你想要的類似'for'做的變量來做(注意C中'for'是如何縮短'while'因此相當多餘)。 – TNW 2013-04-20 01:57:55

回答

1

根據不同的情況下,你可以使用壓縮:

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 

這會給你增加值和減少值。

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解釋器(外殼,如果你願意),或周圍的Python解釋器像bpython的包裝。我真的推薦使用bpython來測試這樣的代碼。

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

您可以使用壓縮,但對於第二個變量的循環並不是真的必要的,所以需要一個簡單得多的方法:

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