Python中按条件合并两个列表:将listA零元素替换为listB对应位置值
原代码错误原因
for i in listA and listB逻辑错误:Python中两个非空列表做and运算会返回后者,也就是你实际遍历的是listB的元素值,而非列表的下标索引。后续用listA[i]相当于把元素值当下标调用,自然无法得到正确结果。- 按位置匹配两个列表元素时,需要遍历下标,或者用
zip()方法同时读取两个列表同位置的元素。
解决方案1:遍历索引实现(与原思路适配)
这是最容易理解的修改方案,和你原本的实现逻辑完全匹配:
listA = [2,0,0,5,6,0] listB = [4,5,7,3,2,1] listC = [] # range(len(listA))会生成0到listA长度-1的连续整数,刚好是每个位置的下标 for i in range(len(listA)): if listA[i] == 0: # 若当前位置listA值为0,追加listB同位置元素 listC.append(listB[i]) else: # 否则追加listA当前位置的元素 listC.append(listA[i]) print(listC) # 输出结果:[2, 5, 7, 5, 6, 1]
解决方案2:简洁写法(列表推导式+zip)
zip(listA, listB)会自动把两个列表同位置的元素打包成元组,无需手动处理下标,是Python中更推荐的写法:
listA = [2,0,0,5,6,0] listB = [4,5,7,3,2,1] listC = [b if a == 0 else a for a, b in zip(listA, listB)] print(listC) # 输出结果:[2, 5, 7, 5, 6, 1]
内容的提问来源于stack exchange,提问作者Jacob
相关产品推荐
相关产品推荐

