字符串中的相邻字母

时间:2016-02-05 02:15:18

标签: python string

尝试编写一个程序来计算彼此相邻的匹配字母对的数量("密西西比"包含3)并输出该数字。

不确定我做错了什么,但我必须使用字符串,while循环和变量作为代码的一部分。它似乎适用于第一行并输出3,然后抛出一个IndexError:字符串索引超出第二个字符串示例的范围。

def count_pairs(s):
    index = 0
    pairs = 0
    letter = 0
    nextletter = 0
    while index < len(s):
        letter = s[index]
        index = index + 1
        nextletter = s[index]
        if letter == nextletter:
            pairs = pairs + 1
            index = index + 1
        else:
            index = index + 1
    return pairs

print(count_pairs("ddogccatppig"))
print(count_pairs("dogcatpig"))
print(count_pairs("xxyyzz"))
print(count_pairs("a"))

2 个答案:

答案 0 :(得分:5)

您正在重新实现groupby的功能。使用库函数有助于避免错误

>>> from itertools import groupby
>>> sum(len(tuple(g)) > 1 for k, g in groupby("ddogccatppig"))
3

无论如何,我认为for循环更合适

>>> s = "ddogccatppig"
>>> sum(s[idx] == j for idx, j in enumerate(s, 1) if idx != len(s))
3

如果您不想使用for

,可以将其拉出为长期sum循环

答案 1 :(得分:2)

在您的while循环中,您正在访问s[index]s[index + 1]

然后你应该改变:

while index < len(s):

为:

while index + 1 < len(s):

或等同于:

while index < len(s) - 1: