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

问题描述 投票:0回答:2
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)

但显然它不起作用。

python list nested-lists
2个回答
0
投票

如果你想检查

a
的子列表的所有内容是否都在
b
中,你可以使用
set
并检查差异。

compare = [[1, 3, 4],[1, 7, 9]]
moves   = [1, 7, 0, 9]

def check(a:list[list], b:list) -> bool:
    y = set(b) # reformat `b` to set
    
    # loop over sublists of `a` as sets
    for x in map(set, a):

        # remove all of the duplicate values of `b` from `a`
        if not (x - y):

            # if there is nothing left, return True
            return True
            
    return False
    
print(check(compare, moves))

0
投票

通常,如果您能够提供有关您的逻辑的更多详细信息,那就更好了。但是,如果我正确理解您的问题,您可以通过迭代

a
中的每个子列表并检查该子列表的所有元素是否都存在于
b
中来实现它。如果任何子集满足条件,则返回
True

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

def check_winning_combinations(a, b):
    for sublist in a:
        if all(elem in b for elem in sublist):
            return True
    return False

result = check_winning_combinations(a, b)
print(result)  # Output: True
© www.soinside.com 2019 - 2024. All rights reserved.