Python 3.10 中未知长度列表的结构模式匹配

Structural pattern matching for list of unknown length in Python 3.10

假设我有以下功能:

def sum_ints(my_list: list[int]) -> int:
    return sum(my_list)

在我开始在 my_list 中添加元素之前,我想使用新的 match 语句检查所有元素的类型。

如果 my_list 的长度为 2,我可以这样做:

def sum_ints(my_list: list[int]) -> int:
    match my_list:
        case [int(), int()]:
            return sum(my_list)
        case _:
            raise Exception("...")

如何匹配包含 n 个元素的列表的大小写?

我认为在你的情况下你只需要 all 内置函数。

if all(isinstance(i, int) for i in my_list):
    # Do Something
else:
    # raise Exception("...")

但是如果你真的想通过match语句来尝试这个逻辑你必须先捕获元素然后使用match guard 来验证条件,但在这种情况下它是一种 complicated/unreadable 解决方案。

a = [1, 2]
match a:
    case [*elements] if all(isinstance(i, int) for i in elements):
        print("All elements are int")
    case _:
        raise Exception("Elements are not int")

另请参阅: