在python中匹配完整字符串,这是什么语法?

2024-04-19 15:01:08 发布

您现在位置:Python中文网/ 问答频道 /正文

在一个练习中,必须编写一个函数,将字符串作为输入,如果字符串只包含单词“racecar”一次或多次,而没有前导和尾随空格,并且最多有一个空格分隔单词,则返回“Valid”。否则返回“无效”。你知道吗

我写了下面的函数,我认为是正确的。你知道吗

def is_valid(s):
    match = re.match(r'^racecar(\sracecar)*$', s)
    return 'Valid' if match != None else 'Not valid'

在解决方案中,他们采用了一种我从未见过的不同方法。return语句中使用的下列语法的名称是什么?你知道吗

def is_valid(s):
    l = s.split(' ')
    return ['Not valid', 'Valid'][all(s == 'racecar' for s in l)]

Tags: 函数字符串rereturnisdefmatchnot
1条回答
网友
1楼 · 发布于 2024-04-19 15:01:08

['Not valid', 'Valid']是一个列表

如果l中的所有元素都是'racecar',则all(s == 'racecar' for s in l)True,否则False。由于boolint(其中True -> 1, False -> 0)的子类,因此可以使用此表达式索引到双元素列表中。你知道吗

['Not valid', 'Valid'][all(s == 'racecar' for s in l)]
#  coerced to 0 or 1  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# in context where an int is required                       

因此相当于

'Valid' if all(s == 'racecar' for s in l) else 'Not valid'

不过,我不会在“真正的”代码中使用它,因为它可能会使您或您的同事在以后阅读时感到困惑。另外,正如melpomene在注释中指出的,这个版本确实接受空字符串作为有效字符串。但您可以通过添加支票来解决此问题:

['Not valid', 'Valid'][l and all(s == 'racecar' for s in l)]

相关问题 更多 >