根据另一个列表列表过滤列表列表

时间:2018-10-13 02:28:36

标签: python python-3.x

我正在尝试基于Python中另一个列表列表的值来过滤列表列表。

例如,我有:

list1 = [[0,1,2],[0,2,3]]
list2 = [['a','b','c'],['a','b','b']]

,并希望过滤list1,使其仅包含与list2中的'a'相同索引的值。所以我想要的结果是

filteredList_a = [[0],[0]]

类似地,将list1过滤为仅具有与list2中的'b'相同索引的值将得到

filteredList_b = [[1],[2,3]]

我知道如何针对单个列表进行操作

>>> list1 = [0,1,2]
>>> list2 = ['a','a','b']
>>> [i for index, i in enumerate(list1) if list2[index] == 'a']
[0,1]

1 个答案:

答案 0 :(得分:4)

以下是嵌套列表推导和zip以避免索引的列表推导方法的扩展:

def filter_by(a, b, target):
    return [[i for i, j in zip(x, y) if j == target] for x, y in zip(a, b)]


list1 = [[0,1,2],[0,2,3]]
list2 = [['a','b','c'],['a','b','b']]
print(filter_by(list1, list2, 'a'))
print(filter_by(list1, list2, 'b'))

输出:

[[0], [0]]
[[1], [2, 3]]

Try it!