用值填充列表

4

我有一个名为deck的列表,其中包含16个项目:

deck = range(0,8)*2

我需要创建一个列表,其中的条目数量与 deck 列表相同,但最初它们都设置为 False

假设新列表的名称为 new_list

如何创建此列表而不必输入16次 False?当我尝试时,会出现索引超出范围的错误。

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

谢谢

2个回答

6
您可以通过乘以列表来多次重复它。例如,这将解决您的问题:
>>> [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)

您可以阅读有关列表操作的文档在这里 - 它们非常适用于像这样的情况!

这是一个不错的解决方案,但需要注意的是,对于“复杂”的类型,生成的列表将有 n 个相同的对象副本,而不是将 n-1 个副本添加到列表中。 - schlimmchen

2

仅仅是为了澄清为什么会出现IndexError的错误:

当你创建变量new_list时,它的长度为0,并且你试图去访问第一个元素,但是这个元素并不存在。

因此,为了让列表随着你需要而增长,你可以使用append方法。这样,你的代码应该如下所示:

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

比我快了10秒...解释得很好。知道出了什么问题总是好的。 - Nander Speerstra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接