Оператор Python AND в двух логических списках - как?

У меня есть два логических списка, например,

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)

Ответы на вопрос(8)

Ваш ответ на вопрос