如何对不同长度列表执行类按位异或?Python实现短列表覆盖长零数组
如何用Pythonic的方式处理不同长度列表的类按位异或覆盖操作?
嘿,这题太适合用Python的原生特性来解决了,完全不用写繁琐的循环,代码简洁又优雅!
首先针对你的具体需求:初始化a = [0, 0, 0, 0, 0],把b = [1,2,3]的内容覆盖到a的开头,得到[1,2,3,0,0],最符合Python风格的写法就是切片赋值:
a = [0, 0, 0, 0, 0] b = [1, 2, 3] a[:len(b)] = b
执行完这行代码,a就会变成[1, 2, 3, 0, 0],完美匹配你的预期!原理很简单:a[:len(b)]选中了a的前len(b)个元素(也就是前3个0),直接把b的元素赋值给这个切片区域,Python会自动帮你完成元素的替换,完全不需要手动循环枚举。
如果你的场景允许生成一个新列表而不是修改原a,还可以用列表拼接的方式,写法同样直观:
a = b + [0] * (len(a) - len(b))
这种方式直接把b和对应数量的0拼接起来,一步得到目标列表。
回到你开头的问题:“如何对不同长度的列表执行类按位异或操作”——其实你这里的需求本质是用b的元素覆盖a对应位置的0(因为0和任何数按位异或的结果都是那个数),而上面的切片赋值刚好完美匹配这个“类异或”的效果,它直接把a的前n个位置替换成b的元素,和0 | x = x的逻辑完全一致。
内容的提问来源于stack exchange,提问作者Sir DrinksCoffeeALot
相关产品推荐
相关产品推荐

