我一直在玩Python 3.10中的结构模式匹配,但不知道如何让它匹配一组。例如,我尝试过:
a = {1,2,3}
match a:
case set(1,2,3):
print('matched')
我尝试过:
a = {1,2,3}
match a:
case set([1,2,3]):
print('matched')
以及:
a = {1,2,3}
match a:
case [1,2,3] if isinstance(a, set):
print('matched')
我想有一种方法可以做到这一点,因为我们可以匹配其他对象,我只是缺少正确的语法,但我想不出还有什么其他方法可以尝试。任何帮助都将不胜感激!谢谢
由于匹配构造不使用集合相等来比较集合,因此需要使用保护来显式执行此操作:
a = {1,2,3}
match a:
case _ if a == set([1,2,3]):
print('matched')
默认情况下,不将集合与集合相等进行比较是不必要的。
这并不是结构模式匹配的真正用途;你匹配的模式更多的是价值而不是结构。因此,我认为您会发现等价的if形式更具可读性:
if a == {1, 2, 3}:
print('matched')
话虽如此。。。
Python 3.10不支持匹配集的语法;它只有用于序列和映射的专用“显示”语法。我想我们曾短暂考虑过这一点,但最终放弃了它,因为它不是很有用或直观(而且很容易添加到更高版本中)。
幸运的是,可以使用限定(或“虚线”)名称通过相等匹配任何值。如果需要将集合作为较大模式的一部分进行匹配或匹配块,那么这可能是最好的方法:
class Constants:
SET_123 = {1, 2, 3}
match a:
case Constants.SET_123:
print('matched')
如果您只想匹配集合(而不是,例如,frozensets),也可以将其与类模式结合使用:
match a:
case set(Constants.SET_123):
print('matched')
我无法运行此代码: 我在Python中找不到匹配关键字。 我在这里找到的:https://www.python.org/dev/peps/pep-0622/#the-match语句 有什么想法吗?
字面量 变量 占位符
我正在计算非负p的Lp距离函数。除了p=0和p=∞ 内置的pow()函数可以很好地发挥作用。在学习结构模式匹配之前,我使用了字典和异常处理: 有些人不希望这里有例外。因此,我将该片段改写为以下内容: 为什么大小写inf不正确(Python v3.10.2)?
我有一个关于使用“永远”类型的穷举开关/情况的问题。 比如说,我有一组字符串:{a,B}(字符串可以是任意长的单词,而且集合本身可能非常大),对于每个子集(比如{},{a,B}),我想创建一个函数:show:Set= 预发伪代码: 是否有可能在编译时保证show函数中包含所有可能的子集?所以把C加到集合{A,B,C}需要我扩充show函数吗?并为{C}、{A,C}、{B,C}和{A,B,C}添加案
我并不是在问regex模式,而是更多地问它的捕获组。我正在尝试将匹配项与正确的捕获组相关联。例如,字符串设置到匹配器组中: 那么假设您有字符串。它匹配捕获组、和。匹配器将匹配项放入、和。是否可以设置数组中的匹配以与捕获组相同的方式放置--以这样的顺序填充数组中的空元素?本质上,我想调用匹配器数组,它返回 如果匹配器找到了字符串的所有捕获组,则该操作有效,但如果字符串缺少任何内容,则不起作用。