如何在 Python 中切换布尔数组?

Posted

技术标签:

【中文标题】如何在 Python 中切换布尔数组?【英文标题】:How do I toggle a boolean array in Python? 【发布时间】:2013-11-23 15:20:24 【问题描述】:

假设我有以下数组:

[True, True, True, True]

如何切换此数组中每个元素的状态?

切换会给我:

[False, False, False, False]

同样,如果我有:

[True, False, False, True]

切换会给我:

[False, True, True, False]

我知道在 Python 中切换布尔值最直接的方法是使用“not”,我在 stackexchange 上找到了一些示例,但如果它在数组中,我不确定如何处理它。

【问题讨论】:

【参考方案1】:

使用not 仍然是最好的方法。你只需要一个list comprehension 就可以了:

>>> x = [True, True, True, True]
>>> [not y for y in x]
[False, False, False, False]  
>>> x = [False, True, True, False]
>>> [not y for y in x]
[True, False, False, True]
>>>

我很确定我的第一个解决方案就是您想要的。但是,如果你想改变原始数组,你可以这样做:

>>> x = [True, True, True, True]
>>> x[:] = [not y for y in x]
>>> x
[False, False, False, False]
>>>

【讨论】:

完美!非常感谢。 @user2957365:请注意,这不会切换原始列表。它返回一个新列表。 @StevenRumbalski - 我很确定 OP 只是把他的帖子写错了,实际上想要我的第一个解决方案。但是,如果他没有,我添加了另一个。 @iCodez:这不是批评,只是仅供参考。如果他想更改原始列表,则分配给切片是要走的路:x[:] = [not y for y in x]。如果他想影响一个本地名称,那么简单的分配就是要走的路:x = [not y for y in x]【参考方案2】:

在纯 python 中,带有列表理解

>>> x = [True, False, False, True]
>>> [not b for b in x]
[False, True, True, False]

或者,您可以考虑使用 numpy 数组来实现此功能:

>>> x = np.array(x)
>>> ~x
array([False,  True,  True, False], dtype=bool)

【讨论】:

【参考方案3】:

@iCodez 对列表理解的回答更符合 Python 风格。我将添加另一种方法:

>>> a = [True, True, True, True]
>>> print map(lambda x: not x, a)
[False, False, False, False]

【讨论】:

-0。我是map 的粉丝,但不是map 的粉丝。没有 lambda 的列表理解可以更好地处理。 同意,与使用 lambda 的 map 相比,python 的列表理解要 beautifulpythonic 得多。我只是把它作为另一种方式。

以上是关于如何在 Python 中切换布尔数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 .map 函数索引切换动态生成的下拉列表?

如何在 Swift 的布尔数组中找到多个 True 语句

如何在javascript中初始化一个布尔数组

SwiftUI - 如何切换核心数据中的所有布尔值

如何在 numpy 中创建布尔数组

如何在 python 中找到正确的向量/数组相似度?