2012-05-20 49 views
0

是否有辦法將下面的列表重置爲全部'False'我有一個使用布爾列表的程序,例如布爾列表重置

bat=[False,False,False,False,False,False,False,False,False,False,False] 

當主循環確實是第二個團隊的第二次迭代時,它仍然帶有來自第一個團隊的「真」值。我需要清除它,所以第二隊可以記錄正確的分數。

任何幫助將不勝感激。歡呼聲

+0

出了什麼問題'因爲我在範圍內(LEN(BAT)):蝙蝠[我] =假'? –

+0

@FerdinandBeyer:它需要太多的輸入? :) –

+0

@larsmans:是的,但在我看來這是一個可憐的藉口:) –

回答

4

爲什麼不在每次迭代之前重新綁定變量?即,

for team in teams: 
    bat = [False] * 11 
    # do whatever 

如果您必須重置就地名單,這是

bat[:] = [False] * 11 

bat[:] = [False] * len(bat) 
+0

你能解釋爲什麼在這裏使用'bat [:] ='而不是'bat ='?謝謝! – mVChr

+1

@mVChr:'bat [:]'就地改變列表。如果您對同一個列表有其他參考,它們將隨'bat'一起更改。嘗試在'a = [0]後打印'a'和'b'; B = A;一個[:] = []'。現在嘗試不用'[:]'。 –

+0

明白了,謝謝@larsmans魔術盒中的新招! – mVChr

1

一個簡單的列表理解應該做的伎倆:

bat = [False for _ in bat] 

或乘以len

bat = [False] * len(bat) 

編輯:你應該使用bat[:] =這些任務(見larsmans的回答徵求意見爲什麼)

+1

爲什麼*你應該使用'bat [:]'? OP似乎只有一個「bat」引用,需要在每次迭代之前重置,因此它只對當前迭代有效。由於您已經創建了一個臨時列表,因此修改原始內容僅僅是(微小的)矯枉過正。 –

+0

謝謝你們,現在就把它工作到我的代碼中。 – user1291271