使用相同的布尔值初始化列表
Posted
技术标签:
【中文标题】使用相同的布尔值初始化列表【英文标题】:Initialize list with same bool value 【发布时间】:2012-11-03 04:22:35 【问题描述】:没有循环是否可以将所有列表值初始化为某个布尔值?例如,我想要一个包含 N 个元素的列表,全部为 False。
【问题讨论】:
【参考方案1】:你可以这样做:-
>>> [False] * 10
[False, False, False, False, False, False, False, False, False, False]
注意:-
请注意,您永远不应该使用具有相同值的mutable types
的list
执行此操作,否则您会看到以下示例中的令人惊讶的行为:-
>>> 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)
【讨论】:
以上是关于使用相同的布尔值初始化列表的主要内容,如果未能解决你的问题,请参考以下文章
如何将 std::map::operator= 与初始值设定项列表一起使用