Python检查二维列表是否包含另一个列表的数字

时间:2019-02-06 21:41:02

标签: python list

我想知道列表中是否包含列表中的数字,但是我没有尝试过任何想要的工作。例如,如果list2 = [[1,2,3],[4,5,6]]中的列表的列表位于list1 = [4、5、6、7]中,则应打印True,因为数字list1中的一个是list2中的整个列表。因此,由于list1包含数字4、5、6,因此输出应为True。

这是我尝试过的

for i in range(len(list2)):
    if list1 in list2[i]:
        print('True')
    else:
        print('False')

它两次打印出False(但是我需要它打印出True),我知道为什么

[1, 2, 3] in [1, 2, 3, 4]
>>> False

有办法避免这种情况吗? 还是我应该只使用字符串,因为它可以正常工作?

1 个答案:

答案 0 :(得分:2)

set相比,list更有效地查找项目集合是否为另一个子集。将列表强制转换为集合可以使用set.issuperset方法进行快速查找。

list_of_lists = [[1,2,3],[4,5,6]]
list1 = [4, 5, 6, 7]

list1_as_set = set(list1)

result = any(list1_as_set.issuperset(l) for l in list_of_lists) # True

以上使用any的代码等效于使用for循环的此解决方案。

for l in list_of_lists:
    if list1_as_set.issuperset(l):
        result = True
        break
else:
    result = False