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

3

我想知道如何判断一个列表是否包含另一个列表中的数字,但是我尝试过的方法都不能满足我的要求。例如,如果一个包含另一个列表的列表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

有没有什么方法可以避免这种情况?还是我应该只使用字符串,因为它们可以很好地处理这种情况?

"[2, 1, 3] in [1, 2, 3, 4]",你希望此操作返回true还是false?它包含了这些数字,但它们的顺序不正确。是否顺序很重要? - Primusa
@roganjosh 但我希望它打印出True。通过添加break,它将不会打印任何东西。 - Miray
你想知道list1中的任何数字是否出现在list2中的任何列表中吗? - Mark
@markmeyer 确切无误 - Miray
1
print('True' if any(s1.intersection(sublist) for s1 in [set(list1)] for sublist in list2) else 'False').intersection() 用于查找重叠部分。如果需要包含所有元素,则改为 .issuperset() - Steven Rumbalski
显示剩余3条评论
1个回答

2
将一个项目集合作为另一个项目集合的子集进行查找,使用setlist更高效。将列表转换为集合可以使用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

1
将列表反转并将其转换为集合,可以使用以下代码:list1_as_set.issuperset(l) - Steven Rumbalski
1
@StevenRumbalski 不错的改进 - Olivier Melançon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接