2017-08-17 118 views
1

目前我正在試圖遍歷三個列表在同一時間:遍歷三個列表同步:嵌套循環不工作

list_weight = [0.9,0.3,0.6,0.4] 
list_reliability = [0.8,0.5,0.2,0.8] 
belief_CRED0 = [create_belief_matrix ('ACBA').iloc[0]] 

belief_CRED0 
Out[40]: 
[1 0.562500 
2 0.562500 
3 0.391304 
4 0.391304 
Name: CRED0, dtype: float64] 

首先,我創建了一個嵌套的循環:

for belief in belief_CRED0: 
    for weight in list_weight: 
     for reliability in list_reliability: 
      m = [(1/(1+weight-reliability))*(weight*belief)] 
print(m) 

但結果完全關閉。所以,我想這樣做,而不是:

for belief, weight, reliability in zip(belief_CRED0, list_weight, list_reliability): 
    m = [(1/(1+weight-reliability))*(weight*belief)] 
print(m) 

但結果是錯誤的,以及:

m 
Out[42]: 
[1 0.460227 
2 0.460227 
3 0.320158 
4 0.320158 
Name: CRED0, dtype: float64] 

從什麼出來,似乎環路僅使用從相應的列表中的第一權重和可靠性(重量= 0.9,可靠性= 0.8)。

正確的輸出應該是:

[1 0.460227 
2 0.210937 
3 0.16770171 
4 0.26086933 

我該怎麼辦?

+1

有點難以回答不知道什麼'[ create_belief_matrix('ACBA')。iloc [0]]'在做。 – MSeifert

+0

你的輸出總是隻是最後一個'm'集合。正確的答案可能在循環的不同部分。 –

+0

在zip的for循環中有一個錯誤...你說'm = [...]'...你應該開始'm'作爲一個空列表......並且'm.append( (1/...))'。這個嵌套循環完全是錯誤的。 – motjuste

回答

1

如果他們都pandas.Seriesnumpy.array那麼你可以直接做到這一點,如:

>>> weight = pd.Series(list_weight, index=range(1, 5)) 
>>> reliability = pd.Series(list_reliability, index=range(1, 5)) 
>>> 1/(1+weight-reliability)*(weight*belief_CRED0) 
1 0.460227 
2 0.210937 
3 0.167702 
4 0.260869 
dtype: float64 
numpy

同理:

>>> weight = np.array(list_weight) 
>>> reliability = np.array(list_reliability) 
>>> 1/(1+weight-reliability)*(weight*belief_CRED0) 
1 0.460227 
2 0.210937 
3 0.167702 
4 0.260869 
Name: CRED0, dtype: float64 
+0

這真的很高效!我現在要更改我的代碼以使用數組。謝謝! – Dine

1

你的for循環zip(這是最好的方法BTW)的一個小錯誤。收集結果...而不是保留分配給m

m = [] 
for belief, weight, reliability in zip(belief_CRED0, list_weight, list_reliability): 
    m.append(weight*belief/(1+weight-reliability)) 
print(m) 
+0

謝謝你的解決方案!我沒有考慮從一個空白列表中工作。 – Dine