Python中移除列表A指定元素并同步删除列表B对应元素
同步过滤列表A及对应位置的列表B
问题描述
需要移除列表A中小于阈值tol的元素,同时移除列表B中与A被移除元素同一位置的元素。例如A中[[2.22105075e-18]]被移除时,B中对应的[[4,13]]也需移除。
当前代码问题
原代码生成CB的逻辑完全错误:
CB=[x for x,y in enumerate(CA) if list(y) in B]
这段代码枚举过滤后的CA的索引与元素,再判断CA的元素是否存在于B中,完全没关联原A和B的位置对应关系,因此输出空列表。
正确实现方式
方法一:同时遍历A和B的对应元素
直接配对遍历A和B的元素,仅保留A元素符合条件时对应的B元素:
import numpy as np A= [[9.16435586e-05], [0.000184193464], [9.28353239e-05], [2.22105075e-18]] B= [[13, 14], [4, 5], [5, 14], [4, 13]] tol=1e-12 CB = [b for a, b in zip(A, B) if a[0] > tol] print(CB)
方法二:通过索引过滤
先筛选出A中符合条件的元素索引,再根据索引提取B中对应位置的元素:
import numpy as np A= [[9.16435586e-05], [0.000184193464], [9.28353239e-05], [2.22105075e-18]] B= [[13, 14], [4, 5], [5, 14], [4, 13]] tol=1e-12 # 获取A中符合条件的元素索引 valid_indices = [i for i, a in enumerate(A) if a[0] > tol] # 根据索引提取B的对应元素 CB = [B[i] for i in valid_indices] print(CB)
输出结果
两种方法均会得到期望输出:
[[13, 14], [4, 5], [5, 14]]
内容的提问来源于stack exchange,提问作者modishah123
相关产品推荐
相关产品推荐

