在每种情况下将 case 语句与多个“或”条件相匹配

问题描述 投票:0回答:1

有没有办法评估 case 语句变量是否在特定列表内?考虑以下场景。我们有三个列表:

a  = [1, 2, 3]
b  = [4, 5, 6]
c  = [7, 8, 9]

然后我想检查 x 是否在每个列表中。像这样的东西(当然这是一个语法错误,但我希望你明白这一点):

match x:
    case in a:
       return "132"
    case in b:
       return "564"
    case in c:
       return "798"

使用 if-else 场景可以很容易做到这一点。尽管如此,如果有很多列表,请关注匹配情况。对于大列表,像这样写它们将是一项平凡的任务:

match x:
    case 1 | 2 | 3:
       return "132"
    case 4 | 5 | 6:
       return "564"
    case 7 | 8 | 9:
       return "762"

是否有一种简单的方法可以检查每种情况的多个条件,而无需将它们写下来?

我检查了重复项,但找不到它们,我希望我不会错过任何东西。如果有重复的问题,请友善地告诉我。

python python-3.x
1个回答
15
投票

看起来

case
接受以Python 3.10开头的“保护”子句,您可以将其用于此目的:

match x:
  case w if w in a:
    # this was the "case in a" in the question
  case w if w in b:
    # this was the "case in b" in the question
  ...

这里的

w
实际上捕获了
x
的值,这也是这里语法的一部分,但它在链接的whatsnew页面上列出的其他一些奇特的cases中更有用。

© www.soinside.com 2019 - 2024. All rights reserved.