在数字列表上使用阈值来子集其他对象列表中的相应元素

use threshold on a list of numbers to subset corresponding elements from other list of objects

我有两个共享相同维度的列表列表(长度相同,列表中的每个列表具有相同数量的元素)

list1 看起来像这样:

list1 = [[1,2,3],[2,3,4],[4,5,2],[4,0,9]]

list2 看起来像这样:

list2 = [['a''b','c'],['a','d','e'],['a','f','b'],['p','o','a']]

假设我有一个阈值 x = 3

我想过滤掉列表 2 中与列表 1 中低于 x = 3 的元素具有相同位置的元素

所以例如对于 x = 3 我想获得:

list3 = [[],['e'],['a','f'],['p','a']

我该怎么做?

感谢您的帮助

可以用zip将两个列表(和子列表)一起走,过滤list2中满足条件的值在list1中相应位置:

out = [[j for i, j in zip(li1, li2) if i>3] for li1, li2 in zip(list1, list2)]

输出:

[[], ['e'], ['a', 'f'], ['p', 'a']]

我会使用 Python zip 函数来“合并”两个列表。

list1 = [[1,2,3],[2,3,4],[4,5,2],[4,0,9]]
list2 = [['a','b','c'],['a','d','e'],['a','f','b'],['p','o','a']]

threshold = 3

list3 = [
    [char for value, char in zip(sub_one, sub_two) if value > threshold]
    for sub_one, sub_two in zip(list1, list2)
]

print(list3)

这输出

[[], ['e'], ['a', 'f'], ['p', 'a']]

zip合并list1list2为:

[([1, 2, 3], ['a', 'b', 'c']),
 ([2, 3, 4], ['a', 'd', 'e']),
 ([4, 5, 2], ['a', 'f', 'b']),
 ([4, 0, 9], ['p', 'o', 'a'])]

而内部 zip 合并,例如[1,2,3]['a','b','c'] 变成 [(1, 'a'), (2, 'b'), (3, 'c')]。然后,内部列表理解可以使用 if value > threshold.

的简单过滤