如何检查一个列表是否包含另一个列表子列表中的项目?

时间:2019-10-10 23:17:01

标签: python python-3.x list

我知道这个问题在这里已经问过几次了,我经历了大多数问题,但是由于某种原因,我无法将这些解决方案用于当前的问题。

我有一个包含11个子列表的列表: list_a = [[1,2,3],[2,3,4],[3,4,5].....[11,12,13]]

我还有一个随机生成的长度为9的列表,范围为1到13:

list_b = [1,4,7,8,2,3,8,9] 

我想创建一个遍历list_a子列表的函数,并且仅当该子列表中的所有项目都存在于list_b中时才返回true。我尝试了“全部”功能,但在这里似乎不起作用,因为它需要列表中的所有项目,而不是子列表。

for i in list_a:
    if all(a in i for a in list_b):
       print ('Yes')

先谢谢您。

2 个答案:

答案 0 :(得分:1)

您刚刚弄错了all()逻辑。您需要检查子列表中的每个项目是否在list_b中(而不是检查list_b中的每个项目是否在子列表中)。

all()的逻辑更改为:

all(a in list_b for a in i)

顺便说一句,如果将list_b更改为set,则效率会更高,并且可以简化事情。

答案 1 :(得分:0)

您的想法是正确的,但是您正在检查list_b的子列表中是否存在list_a中的元素,而您的要求与此相反。您可以在此处使用set操作:

>>> list_a = [[1,2,3],[2,3,4],[3,4,5],[11,12,13]]
>>> list_b = [1,4,7,8,2,3,8,9]
>>> all(set(a).issubset(set(list_b)) for a in list_a)
False

>>> list_a = [[1,2,3],[2,3,4],[3,4,8]]
>>> all(set(a).issubset(set(list_b)) for a in list_a)
True