我有兩個布爾列表,例如,兩個布爾列表上的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)
x是一個列表,y爲列表。當且僅當兩個列表都是非空的(空列表是'false-y',所有非空列表都是'真-y')時,'x和y'纔是真的:即'x和y'確實*不*'和每個元素'或其他關心值。 – user2864740