list_1 = [[1, 2, 3], [100, 13, 17], [5, 14, 29], [17, 55, 1000]]
list_2 = [1, 100]
如果来自list_1
list_2
的至少一个元素,则返回列表应包含list_1
的子列表
寻找类似于[[1, 2, 3], [100, 13, 17] ]
如果list_2 = [5, 13, 17, 55]
:
[[100, 13, 17], [5, 14, 29],[17, 55, 1000]]
如果list_2 = [29]
:
[[5, 14, 29]]
我正在寻找一种最快的方法来实现这一点,因为大多数时候,list_1
的长度超过了500万。
是否有任何网络库功能可以实现这一目标?
答案 0 :(得分:2)
这是一种方法:
list_3 = [x for x in list_1 if any(y in x for y in list_2)]
"魔法"发生在any
中,它循环通过list_2
的元素并检查以确保其中至少有一个存在于传递给list_3
如果您想要更多整洁,您可以使用以下内容:
list_1 = [[1,2,3], [100,13,17], [5,14,29],[17,55,1000]]
def get_new_list(list_from, list_criteria):
# if the list holding the "criteria" is big (has to be tested and calibrated), converting it to a set will speed things up.
if len(list_criteria) > 50:
list_criteria = set(list_criteria)
return [x for x in list_from if any(y in x for y in list_criteria)]
list_2 = [1,100]
print(get_new_list(list_1, list_2)) # [[1, 2, 3], [100, 13, 17]]
list_2 = [5,13,17,55]
print(get_new_list(list_1, list_2)) # [[100, 13, 17], [5, 14, 29], [17, 55, 1000]]
list_2 = [29]
print(get_new_list(list_1, list_2)) # [[5, 14, 29]]
如您所见,不需要外部库或其他任何东西。好的所有标准Python。