如何比较列表元素与嵌套列表?

-1 投票
4 回答
68 浏览
提问于 2025-04-14 16:37
a = [[1, 3, 4],[1, 7, 9]]]
b = [1, 7, 0, 9]

假设我有一个嵌套的列表a,我想把列表b和这个嵌套的列表a进行比较,然后返回True。如果b里有3个项目和a中的某个列表匹配,那就返回True。我该怎么做呢?

这个问题是要创建一个井字棋游戏。列表a包含所有的获胜组合,而列表b则是玩家的输入。如果输入包含1、7和9(就像在列表b中那样),那么这个组合就是获胜组合的一部分(在列表a中)。不过,玩家的输入可能会包含超过3个数字,而且顺序也不一定和列表a中的组合一致。

我试过下面的代码:

a = [[1, 3, 4],[1,7,9]]
b = [1, 7, 0, 9]
set(a).issubset(b)

但显然这并没有成功。

4 个回答

1

你想要检查在 a 中的每一个列表,看看它们是否都是 b 的一部分。如果有任何一个列表符合这个条件,结果就是真:

a = [[1, 3, 4], [1, 7, 9]]
b = [1, 7, 0, 9]

b = set(b)
print(any(set(i) <= b for i in a))
1

根据你尝试过的内容,我觉得你想要做的是:

a = [[1, 3, 4],[1,7,9]]
b = [1, 7, 0, 9]

for item in a:
    if set(item).issubset(b):
        print(item, 'is subset of', b)

或者一般来说,如果你想检查一下 a 中的任何一个项目是否是 b 的子集,可以这样做:

any(set(item).issubset(b) for item in a)
2

使用超集

a = [[1, 3, 4], [1, 7, 9]]
b = [1, 7, 0, 9]

print(any(map(set(b).issuperset, a)))

在线尝试这个!

撰写回答