将 char+1 与字符串中的 char 进行比较的更优雅的方法

More elegant way to compare char+1 against char in a string

对于我下面的代码,以更简洁的方式寻求输入来比较字符串中的 char 和 char + 1 而不会 运行 出现“索引超出范围”错误。

我已经 运行 解决了两个编码竞赛问题,这些问题要求我获取一个字符串,并根据值是否在字符串中重复两次来跟踪计数。截至目前,我的解决方案是创建一个字符串 w/o 第一个字符,以较短字符串的长度比较 for 循环中的两个字符串,然后比较 for 循环之外的最后两个字符。

n = int(input())
unique = ""

for i in range(n):
    p = input()
    unique += p

ahead = unique[1::]
sum = 1

for i in range(len(ahead)):
    if unique[i] == ahead[i]:
        sum += 0
    else:
        sum += 1

if unique[-1] == unique[-2]:
    sum += 1
else:
    sum += 1

print(sum)

对于您似乎要解决的问题,这是一种更简单的方法:

In [1]: s = "hello abbey, nonplussed to see you"

In [2]: sum(s.count(char*2) for char in set(s))
Out[2]: 4

它的工作原理是遍历字符串的唯一字符(通过简单地转换为 set 找到),并计算该字符出现的次数加倍。例如,在该示例字符串的第一次迭代中,char'h',因此我们计算 'hh' 在字符串中出现的次数(零次)。

如果你坚持比较字符对,使用zip():

In [3]: s = "hello"
   ...: for t in zip(s, s[1:]):
   ...:     print(t)
   ...:
('h', 'e')
('e', 'l')
('l', 'l')
('l', 'o')