0

是否有任何聪明的方法可以使用 Python 3.10 中的结构模式匹配来匹配未知长度序列中未知位置的元素?

下面是一个非工作示例,说明了我想做的事情。

match [1, 2, "3", 4, 5]:
    case [*before, str() as str_found, *after]:
        print(f"Found string: {str_found}")

如果您尝试使用保护子句,则不会捕获匹配项:

match [1, 2, "3", 4, 5]:
    case [*elem] if any(isinstance(el, str) for el in elem):
        print("Found string, but I can't tell you its value.")

如果长度已知,则可以使用 or 模式,尽管它并不漂亮:

match [1, 2, "3"]:
    case [*_, str() as str_found] | [str() as str_found, *_] | [_, str() as str_found, _]:
        print(f"Found string: {str_found}")

根据对有关结构模式匹配的其他问题的回答和评论,我预计会有很多回复告诉我,结构模式匹配不是适合这项工作的工具。我知道我的示例并没有展示为此使用结构模式匹配的好处,而不是像简单的 for 循环之类的东西,但想象一下解析由json.load(). 无论如何,我的问题不是正确的工具是什么,而只是是否可以使用此工具完成。

4

0 回答 0