2013-06-21 36 views
2

所以我有點好奇爲什麼這不起作用。在Python中的For循環中使用'And'運算符

怎麼會喜歡代碼:

for a in range(10) and b in range(10): 
    print a + b 

生成說 'B沒有定義' 的錯誤?

此外,代碼等:

for a,b in range(10): 
    print a + b 

生成錯誤: '詮釋對象不是可迭代'。

爲什麼?我沒有事先確定它們的價值,那麼Python怎麼知道它們是int對象呢?另外,我知道你可以使用while循環來代替,但是有什麼方法可以執行我單獨使用for-loop的操作嗎?

+0

你認爲'a'和'b'是什麼? – dawg

+0

您的嘗試被解析爲'for a in(範圍(10)和(b在範圍內(10))'。''b'必須被定義以評估'和'表達式的第二部分(第一部分,'range(10)',將永遠是真實的,因爲它是Python 2中的非空列表,而Python 3中是範圍對象。) – chepner

回答

3
for a,b in zip(range(10),range(10)): 
    print a + b 

應該工作的偉大......假設我理解你的問題正確 如果沒有的話

for a in range(10): 
    for b in range(10): 
     print a+b 

甚至[a+b for a in range(10) for b in range(10)]

+0

謝謝!我正在尋找類似於後一段代碼的東西;提供了我試着用一個很好的數字序列來回答一個歐拉項目問題 –

1

只能通過遍歷迭代一次在for循環中,您的問題中的代碼原樣無效。我相信這是您的本意 - 遍歷兩個範圍同時

for a, b in zip(range(10), range(10)): 
    print a + b 

zip函數創建可迭代的2元元組,以一個元素與每個範圍,然後我們就可以將元組中的每個元素解包爲單獨的變量。

編輯:

如果你想窩在另一個內一個循環,做標準的方式,它會是這樣:

for a in range(10): 
    for b in range(10): 
     print a + b 

但是,我們可以通過使用達到同樣的效果itertools.product,這看起來更接近你首先想到的:

import itertools as it 
for a, b in it.product(range(10), range(10)): 
    print a + b 
+0

非常感謝我實際上試圖做的事情是由Joran Beasley解決,但我不知道zip函數,謝謝! –

+0

@Liongold哦,我看到:)無論如何,看到我編輯的答案,你會發現一個很好的選擇在最後 –

2

其他答案expl用正確的方式來做到這一點,但沒有人解釋你做了什麼錯。

for a in range(10) and b in range(10): 
    print a + b 

這是一個直觀的語法可愛的想法,但Python不知道這一點。你什麼編程優先實際工作出這樣的:

for a in ((range(10)) and (b in range(10))): 

的Python認爲你試圖使一個複雜的表達式生成迭代遍歷。當它嘗試評估b來構建值時,會發生第一個錯誤。如果定義了b,則b in range(10)將導致TrueFalserange(10)的結果也是一個布爾值。然後你會嘗試迭代布爾值時發生另一個錯誤。

for a,b in range(10): 
    print a + b 

如果右側的枚舉包含元素爲2元組,則此類語法有效。此for循環的第一步是嘗試a,b = 0。它試圖通過遍歷它來「解開」右側。但是你不能遍歷一個整數。 a和b尚未定義,但範圍(10)的第一個元素是。這是你無法迭代的整數。