Python中如何移除多列表同索引处的指定重复三元组?
解决方案
首先,Python标准库没有专门处理这种多列表同步按条件过滤的内置函数,但可以用列表推导式结合zip()轻松实现需求,代码简洁高效。
纯Python实现
我们可以同时遍历三个列表的元素,过滤掉满足l1元素='a'且l2元素='b'且l3元素='c'的项,最后拆分回三个新列表:
l1 = ['a', 'b', 'c', 'd', 'e', 'f', 'a', 'j', 'a'] l2 = ['b', 'a', 'b', 'd', 'e', 'f', 'b', 'j', 'b'] l3 = ['c', 'a', 'a', 'd', 'e', 'f', 'c', 'j', 'c'] # 过滤符合删除条件的项 filtered = [(x, y, z) for x, y, z in zip(l1, l2, l3) if not (x == 'a' and y == 'b' and z == 'c')] # 拆分回三个列表并转为list类型 new_l1, new_l2, new_l3 = map(list, zip(*filtered)) print(new_l1) # 输出: ['a', 'b', 'c', 'd', 'e', 'f', 'j'] print(new_l2) # 输出: ['b', 'a', 'b', 'd', 'e', 'f', 'j'] print(new_l3) # 输出: ['c', 'a', 'a', 'd', 'e', 'f', 'j']
用Numpy实现(适合数组操作场景)
如果你习惯用numpy处理数组,也可以通过布尔索引完成过滤:
import numpy as np arr1 = np.array(l1) arr2 = np.array(l2) arr3 = np.array(l3) # 创建过滤掩码:保留不满足删除条件的元素 mask = ~((arr1 == 'a') & (arr2 == 'b') & (arr3 == 'c')) new_arr1 = arr1[mask] new_arr2 = arr2[mask] new_arr3 = arr3[mask] print(new_arr1) # 输出: ['a' 'b' 'c' 'd' 'e' 'f' 'j']
这两种方法都能精准删除你指定的索引项(示例中的6和8),代码可读性和运行效率都表现不错。
内容的提问来源于stack exchange,提问作者Moi sur internet
相关产品推荐
相关产品推荐

