当前位置: 首页 > 知识库问答 >
问题:

如何在Python的结构模式匹配中区分元组和列表?

逄皓轩
2023-03-14

我想使用Python的结构模式匹配来区分元组(例如表示一个点)和元组列表。

尽管如此,直截了当的方法并不奏效:

def fn(p):
    match p:
        case (x, y):
            print(f"single point: ({x}, {y})")
        case [*points]:
            print("list of points:")
            for x, y in points:
                print(f"({x}, {y})")

fn((1, 1))
fn([(1, 1), (2, 2)])

其输出:

single point: (1, 1)
single point: ((1, 1), (2, 2))

而我希望它输出:

single point: (1, 1)
list of points:
(1, 1)
(2, 2)

在这里,切换case语句的顺序也没有帮助。

使用模式匹配解决此问题的好方法是什么?

共有1个答案

徐高懿
2023-03-14

使用tuple(foo)匹配元组和list(foo)匹配列表

def fn(p):
    match p:
        case tuple(contents):
            print(f"tuple: {contents}")
        case list(contents):
            print(f"list: {contents}")

fn((1, 1))  # tuple: (1, 1)
fn([(1, 1), (2, 2)])  # list: [(1, 1), (2, 2)]
 类似资料:
  • 我无法运行此代码: 我在Python中找不到匹配关键字。 我在这里找到的:https://www.python.org/dev/peps/pep-0622/#the-match语句 有什么想法吗?

  • 本文向大家介绍Swift中switch语句区间和元组模式匹配,包括了Swift中switch语句区间和元组模式匹配的使用技巧和注意事项,需要的朋友参考一下 废话不多说了,下面一段代码给大家介绍了switch语句区间和元组模式匹配,具体内容如下所示: 以上所述是小编给大家介绍的Swift中switch语句区间和元组模式匹配,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此

  • 我一直在玩Python 3.10中的结构模式匹配,但不知道如何让它匹配一组。例如,我尝试过: 我尝试过: 以及: 我想有一种方法可以做到这一点,因为我们可以匹配其他对象,我只是缺少正确的语法,但我想不出还有什么其他方法可以尝试。任何帮助都将不胜感激!谢谢

  • 我正在计算非负p的Lp距离函数。除了p=0和p=∞ 内置的pow()函数可以很好地发挥作用。在学习结构模式匹配之前,我使用了字典和异常处理: 有些人不希望这里有例外。因此,我将该片段改写为以下内容: 为什么大小写inf不正确(Python v3.10.2)?

  • 问题内容: 在Swift中,有一个通用的模式可以用来解开可选项: 我目前正在执行这种模式匹配,但是在切换情况下使用元组,其中两个参数都是可选的: 但是,此打印: 有没有一种方法可以使我的选配和模式匹配不为零而展开?目前,我的解决方法是: 问题答案: 您可以使用以下模式: 只是的快捷方式,因此等效于