如何移除list1中的零元素及list2中对应索引的元素?
问题:同步移除两个列表中对应索引的元素
原始数据:
list1 = [0,10,20,0,40,50] list2 = [1,2,3,4,5,6]
需求:移除list1中的所有0元素,同时移除list2中对应索引位置的元素,最终期望结果:
list1 = [10,20,40,50] list2 = [2,3,5,6]
你的代码问题分析
你当前的代码逻辑完全偏离需求:
- 先把list1的非零元素存入list3,这一步没问题,但后续对list2的操作完全错误;
for i in range(len(list3)): list2.append(i)是往list2里添加0、1、2、3这些数值,和需求无关;list2.remove(i)是移除list2中第一个等于i的元素,而不是对应索引的元素,比如list3里的10在list2中根本不存在,这步操作要么无效要么误删其他元素。
正确解法
方法1:遍历索引收集元素
最直观的方式,通过索引同时遍历两个列表,保留符合条件的元素:
new_list1 = [] new_list2 = [] for idx, num in enumerate(list1): if num != 0: new_list1.append(num) new_list2.append(list2[idx]) # 替换原列表 list1 = new_list1 list2 = new_list2
方法2:列表推导式+zip打包(更简洁)
用zip把两个列表的对应元素打包成元组,筛选出list1元素非零的元组,再拆分回两个列表:
# 筛选符合条件的元素对 filtered_pairs = [(x, y) for x, y in zip(list1, list2) if x != 0] # 拆分回两个列表(如果筛选结果为空,要避免解包错误) if filtered_pairs: list1, list2 = zip(*filtered_pairs) # 转成列表类型(zip返回元组) list1 = list(list1) list2 = list(list2) else: list1 = [] list2 = []
运行后就能得到你想要的结果。
内容的提问来源于stack exchange,提问作者Afroboy23
相关产品推荐
相关产品推荐

