我寫了這段代碼:
l1 = [1, 2, 3, 4]
l2 = [5, 6, 7, 8]
print([x**2 for x in l1 for y in l2])
輸出這個:
[1, 1, 1, 1, 4, 4, 4, 4, 9, 9, 9, 9, 16, 16, 16, 16]
我的問題是,這個串列理解中發生了什么?為什么專案數量l1乘以長度l2?
uj5u.com熱心網友回復:
就像你這樣做:
for x in l1:
for y in l2: #this loop has len(l2) iteration
print(x**2)
在y回圈中,您只使用 variable x,它不會因len(l2)迭代而改變。
uj5u.com熱心網友回復:
這里發生了兩件事。
第一的: print([x**2 for x in l1...
這是取 l1 中的每個元素并將它們平方產生 [1, 4, 9, 16]
第二: ... for y in l2])
這是對 l2 中的每個值重復此程序(對 l1 中的元素進行平方和列印)一次,這就是為什么每個平方值都得到 4 個的原因。
uj5u.com熱心網友回復:
您的串列理解相當于以下for回圈:
result = []
for y in l2:
for x in l1:
result.append(x**2)
由此您可以看出為什么內回圈重復了 4 次。
如果要并行回圈遍歷兩個串列,而不是嵌套,請使用zip():
[x**2 for x, y in zip(l1, l2)]
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/364164.html
下一篇:變數未在C 中的范圍錯誤中宣告?
