Python 基于另一个列表列表筛选列表列表

Python 基于另一个列表列表筛选列表列表,python,python-3.x,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]] 我知道如何为单个列表

我试图根据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]

下面是对列表理解方法的扩展,使用嵌套列表理解和
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]]