【发布时间】:2015-11-18 11:00:39
【问题描述】:
我有两个布尔列表,例如,
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)
【问题讨论】:
-
x 是一个列表,y 是一个列表。
x and y为真当且仅当两个列表都是非空的(空列表是 'false-y',所有非空列表都是 'truth-y'):也就是说,x and y不 '和每个元素' 或以其他方式关心值。
标签: python list boolean operator-keyword