繁体   English   中英

带字符串的布尔表达式

[英]Boolean expression with strings

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

例如:

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

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

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

我认为我需要进行“ for”循环,但从未找到解决方案。

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

可以使用递归lambda来完成:

is_periodiek = lambda x, y: x == y or (is_periodiek(x[len(y):], y) and x.find(y) == 0)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM