2016-08-03 55 views
3

填充名單上有一個名爲甲板有16個項目在其列表:與價值

deck = range(0,8)*2 

我需要創建具有相同的條目數爲甲板名單列表,但最初,他們都設置爲

說,新的列表的名稱是new_list

如何在不打字的情況下創建此列表錯誤 16次?當我嘗試這個時,我得到索引超出範圍錯誤。

deck = range(0,8)*2 
new_list = [] 
for card in deck: 
    new_list[card] = False 

感謝

回答

4

您可以通過乘以多次重複的列表。例如,這將解決你的問題:

>>> [False] * 16 
[False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] 

您還可以在列表中的多個元素做到這一點,就像這樣:

>>> [1, 2] * 5 
[1, 2, 1, 2, 1, 2, 1, 2, 1, 2] 

如果你想確保名單將擴大,因爲你改變了甲板的尺寸,你可以通過長度倍增,像這樣:

deck = range(0, 8) * 2 
falses = [False] * len(deck) 

你可以閱讀列表操作here的文檔 - 他們是相當方便的像這樣的情況!

+0

這是一個不錯的解決方案,但要注意,對於「複雜」的類型,得到的名單將有'的*同*對象的N'副本,而不是'ñ -1'副本添加到列表中。 – schlimmchen

2

只是爲了澄清爲什麼你的IndexError

當您創建new_list變量,它的長度爲0,並且您嘗試訪問的第一個元素,它不存在。

因此,爲了讓列表隨着需要而增長,您可以使用append方法。那麼你的代碼應該是這個樣子:

deck = range(0,8)*2 
new_list = [] 
for card in deck: 
    new_list.append(False) 
+0

比我快10秒...很好解釋它。知道哪裏出了問題總是很好的。 –