Python中如何根据alist给定索引将blist对应位置的值设为0
原有代码错误点
- 逻辑判断错误:
if i==alist是将单个索引值和整个alist列表做相等对比,该条件永远为False,永远不会进入分支执行代码。 - 语法&逻辑错误:
blist[alist] == 0有两处问题,一是==是相等判断运算符,执行赋值操作需要用单等号=;二是不能直接把整个列表作为列表的下标使用。
正确实现
推荐直接遍历alist中的索引值修改blist对应位置,效率更高,还可以增加边界判断避免alist中的值超出blist索引范围引发报错:
alist = [8,7,4,2] blist = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] for idx in alist: # 边界判断,防止索引越界 if 0 <= idx < len(blist): blist[idx] = 0 # 验证结果 print(blist)
执行后blist中索引为2、4、7、8的位置会被替换为0,其余位置保持原值不变。
如果你一定要用enumerate写法实现,也可以参考如下代码,不过该写法需要遍历整个blist,效率低于上面的实现:
for i, val in enumerate(blist): if i in alist: blist[i] = 0
内容的提问来源于stack exchange,提问作者Nandu Menon
相关产品推荐
相关产品推荐

