
python编码中,我们有时希望对两个长度相同的列表进行像“按位与”的 *** 作,但结果并不如我们的预期。
如:
a=[0,0,1,1,1,0]
b=[1,0,1,0,1,0] # 预期是得到[0,0,1,0,1,0]
e=a and b # e列表为 [1,0,1,0,1,0]
进行and运算时,我们从最简单的两数相与开始讨论
- 两数相与:
当x and y的结果为True的时候,返回的并不是True,而是运算结果的最后一位变量的值。这里是返回y的值。 - 列表相与:
列表list1和list2中遍历元素i和j。当i and j结果为False的时候,返回的是第一个False的值,如i和j都为False那么返回i的值,i为真,j为假,那么返回的是j的值。
这样看来,一开始的例子运算的结果就可以解释了。
但这样并不能得到我们预期的效果。
可以编码如下:
c=[a[i] & b[i] for i in range(len(a))]
d=[a[i] and b[i] for i in range(len(a))]
c和d的运算方式都可以得到正确的结果。
这样的方式在其他数据结构中并不一定成立。如在numpy中的数组np.array支持矩阵之间的and运算,然后返回对应布尔矩阵。pandas中的Series和DataFrame中也支持相应的布尔索引
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)