带字符串的布尔表达式

时间:2014-11-24 21:14:41

标签: python string count

当我需要检查一个字符串是否只是多次重复的另一个字符串时,如何创建一个布尔表达式。

例如:

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

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

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

我想我需要做一个' for'循环,但它从未找到解决方案。

3 个答案:

答案 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)