返回有两个相同字符的次数

时间:2015-03-18 23:35:43

标签: python-2.7

定义一个函数immPairs(..),它接收一个字符串并返回字符串中紧接着另一个相同字符的次数。如果一个接一个地有两个以上相同的字符,则应计算所有直接对。

例如:

immPairs(“abxxab88ef”) 

应返回2,因为两个直接对“xx”和“88”

immPairs(“abxxxab88ef”)

应该返回3,因为三个直接对“xx”,“xx”和“88”

例如,以下代码片段:

print immPairs("abxxab88ef")

应该产生输出: 2

这就是我在正确的轨道上?我无法弄清楚适当的' if'如果是,则使用声明。

def immPairs(st):
   count = 0
   l = list(st)
   for char in l:
     if char == char:
        count = count + 1

  return count

print immPairs("abxxab88ef")

2 个答案:

答案 0 :(得分:0)

你可以写:

def immPairs(st):
    count = 0
    for i in range(len(st) - 1):
        if st[i] == st[i + 1]:
            count += 1
    return count

通过检查每个位置ii + 1来查看字符串是否相等。如果他们那么你找到了一对。这意味着你只需要检查i直到最后一个字符,因为最后一个字符串是由字符串的最后两个字符组成的。

答案 1 :(得分:0)

这似乎适用于单行解决方案:

In [1]: s = 'abxxxab88ef'
In [2]: sum((s[i]==s[i-1] for i in range(1,len(s)-1)))
Out[2]: 3

(计算一个字符与生成器中的前一个字符相同的次数,该生成器迭代除第一个字符以外的所有字符)。

您发布的代码的主要问题是char == char始终为True。另请注意,字符串是可迭代的,因此您无需将str转换为list。要按照您的方式执行操作,您可以使用enumerate

def immPairs(st):
   count = 0
   for i, char in enumerate(st[1:]):
     if char == st[i]:
        count = count + 1

   return count

print immPairs("abxxab88ef")

此处,enumerate生成对(0, 'b')(1, 'x')等,因此索引i实际上是上一个字符的索引在字符串中。