将 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')
对于我下面的代码,以更简洁的方式寻求输入来比较字符串中的 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')