匹配每个案例中具有多个'or'条件的案例语句



是否有一种方法来评估一个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"

是否有一种简单的方法来检查每个案例的多个条件,而不必将它们写下来?

我检查了重复的,但是我找不到,我希望我没有错过什么。如果有重复的问题,请告诉我。

似乎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页面上列出。

最新更新