假设我有两个等长列表,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
上使用列表推导。有什么想法/建议吗?
答案 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)
但我仍然建议考虑以不同的方式存储数据......