【问题标题】:Initialize list with same bool value使用相同的布尔值初始化列表
【发布时间】:2012-11-03 04:22:35
【问题描述】:

没有循环是否可以将所有列表值初始化为某个布尔值?例如,我想要一个包含 N 个元素的列表,全部为 False。

【问题讨论】:

    标签: python list initialization boolean


    【解决方案1】:

    你可以这样做:-

    >>> [False] * 10
    [False, False, False, False, False, False, False, False, False, False]
    

    注意:- 请注意,您永远不应该使用具有相同值的mutable typeslist 执行此操作,否则您会看到以下示例中的令人惊讶的行为:-

    >>> my_list = [[10]] * 3
    >>> my_list
    [[10], [10], [10]]
    >>> my_list[0][0] = 5
    >>> my_list
    [[5], [5], [5]]
    

    如您所见,您在一个内部列表中所做的更改会反映在所有列表中。

    【讨论】:

    • 这绝对是这个问题的正确习语。但是,在处理可变类型时使用它绝对是不正确的习惯用法:[[]]*10 对新来者有一些令人惊讶的后果 :)。
    • 请参阅 this link 为什么不应该使用乘法创建可变类型列表。
    【解决方案2】:
        my_list = [False for i in range(n)]
    

    这将允许您更改单个元素,因为它独立构建每个元素。

    虽然,这在技术上一个循环。

    【讨论】:

      【解决方案3】:

      当空间很重要时,bytearray 是更好的选择。它的空间效率大约是布尔解决方案列表的五倍。

      这会创建一个 N 值数组,初始化为零:

      B = bytearray(N)
      

      【讨论】:

        猜你喜欢
        • 2019-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-27
        • 2013-08-03
        • 1970-01-01
        • 2016-12-27
        • 1970-01-01
        相关资源
        最近更新 更多