在 Python 中初始化大量布尔值 [重复]
Posted
技术标签:
【中文标题】在 Python 中初始化大量布尔值 [重复]【英文标题】:Initializing a large list of booleans in Python [duplicate] 【发布时间】:2012-11-26 03:46:12 【问题描述】:可能重复:Initialize list with same bool value
我正在尝试在 python 2.7 中创建一个素数生成器,并计划使用一个布尔数组(或列表)来指示给定数字是否为素数。
假设我想初始化一个包含 5000 个布尔值的列表,我该怎么做而不需要手动输入 [True, True, ...]
【问题讨论】:
查看这篇文章 - ***.com/a/13382804/1679863 对于这么大的列表,可能值得使用 Numpy 数组 -np.repeat([True], 5000)
使用的内存比 [True] * 5000
少三个数量级。
对于较大的数值问题,bytearray 是更好的选择:***.com/a/42445940/74291
【参考方案1】:
你可以试试这个:
[True] * 5000
列表可以在 Python 中相乘(字符串也可以):
>>> [True] * 3
[True, True, True]
>>> "abc" * 3
'abcabcabc'
【讨论】:
附带说明:这适用于原始类型列表,例如数字和布尔值,但不适用于对象列表(或列表、列表或字典等),如在这种情况下,列表将包含 5000 次相同的实例。 谢谢,我在找什么 谢谢,很方便【参考方案2】:我正在尝试在 python 2.7 中创建一个素数生成器,并计划使用一个布尔数组(或列表)来指示给定数字是否为素数。
这听起来很浪费。更好的方法是使用 set()
仅包含您需要的数字:
>>> primes = 2, 3, 5, 7
>>> 4 in primes
False
>>> 5 in primes
True
【讨论】:
所以你建议他手动输入 2, 3, 5, 7 ... 而不是 [True, True, True ...]。有趣的方法。 因为有人反对,我不得不说我完全同意!两个素数之间的距离越来越大,所以你走的越大,你拥有的false
元素就越浪费。
+1 这当然是更好的方法。
@gg.kaspersky 不,我给出了set()
的使用示例(提示:这是一个函数!)。如果有人说他们正在编写一个生成器,我想他们知道这不会归结为在纸上计算它们并输入程序。
@lqc,OP 可能想要实现基于该列表初始化的埃拉托色尼筛算法。你实际上建议他实现不同的算法。以上是关于在 Python 中初始化大量布尔值 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
python - 用两个不同列表中的值替换列表的布尔值[重复]