2016-08-03 54 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秒...很好解释它。知道哪里出了问题总是很好的。 –