Python中列表相“与”时出现的问题

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运算时,我们从最简单的两数相与开始讨论

  1. 两数相与:
    x and y的结果为True的时候,返回的并不是True,而是运算结果的最后一位变量的值。这里是返回y的值。
  2. 列表相与:
    列表list1list2中遍历元素ij。当i and j结果为False的时候,返回的是第一个False的值,如ij都为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))]

cd的运算方式都可以得到正确的结果。
这样的方式在其他数据结构中并不一定成立。如在numpy中的数组np.array支持矩阵之间的and运算,然后返回对应布尔矩阵。pandas中的SeriesDataFrame中也支持相应的布尔索引

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

#冷咖啡离开了杯垫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值