7

假设我有以下数组:

[True, True, True, True]

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

切换会给我:

[False, False, False, False]

同样,如果我有:

[True, False, False, True]

切换会给我:

[False, True, True, False]

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

4

3 回答 3

11

使用not仍然是最好的方法。您只需要一个列表理解即可:

>>> 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]
>>>
于 2013-11-11T18:05:42.963 回答
3

在纯 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)
于 2013-11-11T18:22:03.733 回答
2

@iCodez 对列表理解的回答更加 Pythonic。我将添加另一种方法:

>>> a = [True, True, True, True]
>>> print map(lambda x: not x, a)
[False, False, False, False]
于 2013-11-11T18:09:31.053 回答