两个列表的列表理解
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
上使用列表理解。任何 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)
但我仍然建议考虑以不同的方式存储数据...
假设我有两个等长列表,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
上使用列表理解。任何 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)
但我仍然建议考虑以不同的方式存储数据...