【问题标题】:Populating list with values [duplicate]用值填充列表[重复]
【发布时间】:2016-08-03 11:01:52
【问题描述】:

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

deck = range(0,8)*2

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

说新列表的名称是new_list

如何在不输入 False 16 次的情况下创建此列表?当我尝试这个时,我得到 index out of range 错误。

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

谢谢

【问题讨论】:

    标签: python list python-2.7 for-loop


    【解决方案1】:

    您可以通过将列表相乘来多次重复该列表。例如,这将解决您的问题:

    >>> [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 的文档 - 对于此类情况,它们非常方便!

    【讨论】:

    • 这是一个简洁的解决方案,但请注意,对于“复杂”类型,结果列表将包含 same 对象的 n 副本,而不是 n-1 副本添加到列表中。
    【解决方案2】:

    只是为了澄清为什么您会收到IndexError

    当您创建new_list 变量时,它的长度为0,您尝试访问第一个不存在的元素。

    因此,为了让列表根据需要增长,您可以使用append 方法。那么你的代码应该是这样的:

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

    【讨论】:

    • 比我快 10 秒...很好解释。知道出了什么问题总是好的。
    猜你喜欢
    • 2015-04-24
    • 2017-07-10
    • 2015-05-13
    • 2021-12-27
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    相关资源
    最近更新 更多