当我需要检查一个字符串是否只是多次重复的另一个字符串时,如何创建一个布尔表达式。
例如:
is_periodiek('ABABABABABABABABABABABABABABABABABAB', 'AB')
>>> True
is_periodiek('ABABABABABABABABABABABABABABABABABAB', 'ABA')
>>> False
is_periodiek('ABABABABABABABABABABABABABABABABABAB', 'ABAB')
>>> True
我想我需要做一个' for'循环,但它从未找到解决方案。
答案 0 :(得分:1)
is_periodiek = lambda text, sub: not text.replace(sub, '')
答案 1 :(得分:0)
当你的魔杖模式连续显示时,你可以按照模式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
答案 2 :(得分:0)
可以使用递归lambda来完成:
is_periodiek = lambda x, y: x == y or (is_periodiek(x[len(y):], y) and x.find(y) == 0)