测试字符串中的所有字符实例是否在Python中是连续的

时间:2015-11-06 19:48:13

标签: python string pattern-matching

我正在寻找帮助创建一个函数来测试字符串中字符的所有实例是否都是“连续的”。我使用引号是因为我想处理实例在字符串的开头和结尾都是“连续”的情况(它们“换行”,即“111000000111”)

示例案例,测试连续数字1的实例:

result1 = testConsecutive('1110000011') ## GOOD (number 1's "wrap")
result2 = testConsecutive('1000000111') ## GOOD (number 1's "wrap")
result3 = testConsecutive('0000111000') ## GOOD (1's consecutive)
result4 = testConsecutive('0000000010') ## GOOD (1's consecutive)
result5 = testConsecutive('0000010100') ## FAIL (1's non-consecutive)
result6 = testConsecutive('1010001010') ## FAIL (1's non-consecutive)
result7 = testConsecutive('1100010011') ## FAIL (1's non-consecutive)
result8 = testConsecutive('1100011000') ## FAIL (1's non-consecutive)

以下代码适用于以上 result8以外的所有情况:

def testConsecutive(string):
    solution = string.lstrip('1').strip('0').count('0')

    if solution == 0:
       return True
    else:
       return False

谢谢!

3 个答案:

答案 0 :(得分:4)

我不知道如何使用基于条带的解决方案来实现这一目标。

这是另一种方法。

假设您的字符串仅包含“0”和“1”,您可以使用itertools.groupby对连续出现的事件进行分组。如果你得到3组或更少,则字符串满足谓词。

import itertools
def testConsecutive(s):
    groups = itertools.groupby(s)
    return len(list(groups)) <= 3

答案 1 :(得分:3)

def testConsecutive(string):
    return not '1' in string.lstrip('1').rstrip('1') or not '0' in string.lstrip('0').rstrip('0')

快速而肮脏的解决方案,正则表达肯定会做得更好

答案 2 :(得分:2)

如果你想使用一个基于条带的解决方案,你将不得不测试两个案例,其中1个填充你的零字符串或0个填充你的字符串:

def testConsecutive(string):
    solution1 = string.strip('0').count('0')
    solution2 = string.strip('1').count('1')

    if solution1 == 0 or solution2 == 0:
       return True
    else:
       return False