在 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 - 用两个不同列表中的值替换列表的布尔值[重复]

用python输入布尔值[重复]

Python:将字符串列表转换为布尔值,其中布尔值以字符串形式存在[重复]

Python中布尔类型的值都有哪些呢?

如何从大量可为空的布尔值中返回布尔值?

使用烧瓶返回布尔作为POST响应[重复]