[英]List comprehension on two lists
假设我有两个等长列表, list1
和list2
,都由一堆数字组成。 我想删除不符合特定条件的所有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
上使用列表list2
。 有什么想法/建议吗?
合并,过滤,拆分:
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)
但我仍然建议考虑以其他方式存储数据...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.