Ho due liste booleani, ad esempio,Python E operatore su due liste booleane - come?
x=[True,True,False,False]
y=[True,False,True,False]
voglio E queste liste insieme, con i risultati attesi:
xy=[True,False,False,False]
ho pensato che l'espressione x and y
avrebbe funzionato, ma è venuto a scoprire che esso non: infatti, (x and y) != (y and x)
uscita di x and y
: [True,False,True,False]
uscita di y and x
: [True,True,False,False]
Usando di lista fa hanno uscita corretta. Meno male!
xy = [x[i] and y[i] for i in range(len(x)]
Mente che non sono riuscito a trovare alcun riferimento che mi ha detto l'operatore avrebbe funzionato come ho cercato con xe y. Ma è facile provare cose in Python. Qualcuno può spiegarmi cosa sta succedendo con x and y
?
E qui è un semplice programma di test:
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 è un elenco, y è un elenco. 'x e y' è vero se e solo se entrambe le liste non sono vuote (una lista vuota è 'false-y', tutte le liste non vuote sono 'truth-y'): cioè,' x e y' fa * non * 'e ogni elemento' o altrimenti si preoccupano dei valori. – user2864740