2013-08-21 118 views
2

我想做簡單的列表乘法。它適用於c,但對於以下錯誤不適用d:TypeError:zip參數#1必須支持迭代zip參數#1必須支持迭代

任何修改它的建議都是值得讚賞的。

x=[] 
    area1 = (area1)/100 
    area2 = (area2)/100 
    area3 = (area3)/100 
    x.append(area1) 
    x.append(area2) 
    x.append(area3) 
    # resultant x is [0.96, 0.03, 0.0] 

    a = [13.87, 14.78, 10.3] 
    b = [0.44, 0.39, 0.38] 

    c = sum([x* a for x, a in zip(x, a)]) 
    d = sum([x* b for x, b in zip(x, b)]) 

回答

1

您必須在列表解析使用大於x,a和b其他名稱:

c = sum([_x * _a for _x, _a in zip(x, a)]) 
d = sum([_x * _b for _x, _b in zip(x, b)]) 

你的是重新分配X爲x的第一個元素,並沒有對第二次使用zip與x。

您可以改用mapoperator.mul

from operator import mul 
c = sum(map(mul, x, a)) 
d = sum(map(mul, x, b)) 
+0

我只是想OP的帖子,我不明白,要麼爲什麼他的代碼無法正常工作,因爲它看起來像它應該。什麼是_ _前綴在做什麼,你能解釋一下你的答案嗎? –

+0

它在IDLE窗口中使用簡單列表時起作用,但在腳本內失敗。你的建議奏效了。我仍然不明白「_」前綴在幹什麼? – Ibe

+0

它只是一個不同的名字。除x,a和b以外的任何名稱都可以使用。 – dansalmo

相關問題