带字符串的布尔表达式

2024-04-20 00:52:28 发布

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

当我需要检查一个字符串是否只是重复多次的另一个字符串时,如何生成布尔表达式。你知道吗

例如:

is_periodiek('ABABABABABABABABABABABABABABABABABAB', 'AB')
>>> True

is_periodiek('ABABABABABABABABABABABABABABABABABAB', 'ABA')
>>> False

is_periodiek('ABABABABABABABABABABABABABABABABABAB', 'ABAB')
>>> True

我想我需要做一个“for”循环,但它从来没有找到解决方案。你知道吗


Tags: 字符串falsetrueforabis表达式解决方案
3条回答

可以使用递归lambda完成:

is_periodiek = lambda x, y: x == y or (is_periodiek(x[len(y):], y) and x.find(y) == 0)
is_periodiek = lambda text, sub: not text.replace(sub, '')

当模式连续出现时,您可以按模式split您的字符串,如果您得到一个包含空字符串的列表,您可以返回True,否则False

>>> s='ABABABABABABABABABABABABABABABABABAB'
>>> s.split('AB')
['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
>>> s.split('ABA')
['', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B']
>>> s.split('ABAB')
['', '', '', '', '', '', '', '', '', '']

如注释中所述,您可以通过以下比较获得布尔值:

>>> len(''.join(s.split('AB'))) == 0
True
>>> len(''.join(s.split('ABA'))) == 0
False
>>> len(''.join(s.split('ABAB'))) == 0
True

也可以在函数中使用它:

def IsConsecutive(string,pattern):
    return len(''.join(string.split(pattern))) == 0

相关问题 更多 >