У меня есть два булевых списка, например,
x=[True,True,False,False]
y=[True,False,True,False]
Я хочу И эти списки вместе, с ожидаемым выходом:
xy=[True,False,False,False]
Я думал, что выражение x and y
будет работать, но обнаружило, что это не так: на самом деле (x and y) != (y and x)
Вывод x and y
: [True,False,True,False]
Вывод y and x
: [True,True,False,False]
Использование подсчета списков имеет правильный вывод. Уф!
xy = [x[i] and y[i] for i in range(len(x)]
Помните, я не мог найти ссылку, в которой говорилось, что оператор AND будет работать, как я пытался с x и y. Но легко попробовать вещи в Python.
Может кто-нибудь объяснить мне, что происходит с x and y
?
И вот простая тестовая программа:
import random
random.seed()
n = 10
x = [random.random() > 0.5 for i in range(n)]
y = [random.random() > 0.5 for i in range(n)]
# Next two methods look sensible, but do not work
a = x and y
z = y and x
# Next: apparently only the list comprehension method is correct
xy = [x[i] and y[i] for i in range(n)]
print 'x : %s'%str(x)
print 'y : %s'%str(y)
print 'x and y : %s'%str(a)
print 'y and x : %s'%str(z)
print '[x and y]: %s'%str(xy)