列表理解两个列表

时间:2015-09-11 21:09:51

标签: python list-comprehension

假设我有两个等长列表,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”的方法,特别是如果有任何方法我可以在list2以及list1上使用列表推导。有什么想法/建议吗?

2 个答案:

答案 0 :(得分:4)

合并,过滤,拆分:

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

答案 1 :(得分:1)

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

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

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

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

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