两个列表的列表理解

List comprehension on two lists

假设我有两个等长列表,list1list2,它们都由一堆数字组成。我想删除 list1 中不符合特定条件的所有元素。很简单。不过,我还如何从 list2 中删除相应的元素?例如,如果我删除 list1 的第 5 个元素,我还想删除 list2 的第 5 个元素。下面是我正在尝试执行的操作的示例:

list1 = [i for i in list1 if i >= 1]
list2 = list2 #but with the corresponding values of list1 removed from list2 as well

我可以想出,比如说,

list2_temp = []
for j in range(len(list1)):
    if list1[j] >= 1:
        list2_temp.extend(list2[j])

list1 = [i for i in list1 if i >= 1]

但我正在寻找一种更 "Pythonic" 的方法来做到这一点,特别是如果有任何方法我可以在 list2list1 上使用列表理解。任何 ideas/suggestions?

合并、过滤、拆分:

list1[:], list2[:] = zip(*((x, y) for (x, y) in zip(list1, list2) if predicate(x)))

我认为问题可能在于您有 2 个平行列表,而不是一个包含每个元素的所有数据的项目的列表。

将数据视为电子表格 -- 当前您有 2 列,并且您希望按一列中的值过滤行。与其将数据建模为一堆列,不如将其建模为行列表。

要解决此问题现在您可以将列表压缩在一起,过滤它们,然后在最后解压缩:

items = [(i, j) for i, j in zip(list1, list2) if i >= 1]
tuple1, tuple2 = zip(*items)

但我仍然建议考虑以不同的方式存储数据...