定义一个函数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")
答案 0 :(得分:0)
你可以写:
def immPairs(st):
count = 0
for i in range(len(st) - 1):
if st[i] == st[i + 1]:
count += 1
return count
通过检查每个位置i
和i + 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
实际上是上一个字符的索引在字符串中。