Подтвердить что ты не робот

Перемещение булевых значений в список Python

У меня есть логический список в Python

mylist  = [True , True, False,...]

который я хочу изменить на логическую противоположность [False, False, True , ...] Есть ли встроенный способ сделать это в Python (что-то вроде вызова not(mylist)) без рукописного цикла для изменения элементов?

4b9b3361

Ответ 1

Это легко со списком:

mylist  = [True , True, False]

[not i for i in mylist]

дает

[False, False, True]

Ответ 2

Унарный оператор тильды (~) сделает это для numpy.ndarray. Итак:

>>> import numpy
>>> mylist = [True, True, False]
>>> ~numpy.array(mylist)
array([False, False, True], dtype=bool)
>>> list(~numpy.array(mylist))
[False, False, True]

Обратите внимание, что элементы перевернутого списка будут иметь тип numpy.bool_ not bool.

Ответ 3

>>> import operator
>>> mylist  = [True , True, False]
>>> map(operator.not_, mylist)
[False, False, True]

Ответ 4

Numpy включает эту функцию явно. Функция "numpy.logical_not (x [, out])" вычисляет значение истинности NOT x поэлементно.

import numpy
numpy.logical_not(mylist)

http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.logical_not.htmlтакими же примерами)

Пример:

import numpy
mylist  = [True , True, False]
print (mylist)

возвращает [True, True, False]

mylist=numpy.logical_not(mylist)
print (mylist)

возвращает [False False True]

Ответ 5

Почему бы просто не использовать простое понимание списка?

mylist[:] = [not x for x in mylist]

Ответ 6

Я бы сделал это так, как говорят все остальные, но для документирования альтернатив вы также можете сделать

import operator
myList = map(operator.not_, myList)

Ответ 7

как насчет следующего

>>> import numpy
>>> list(numpy.asarray(mylist)==False)

Ответ 8

numpy.invert - еще один хороший вариант:

x = [False, True, True] 
not_x = np.invert(x) # [True, False, False]