我对编码非常陌生,正在通过一些玩具问题来学习,但遇到了这个问题。(是的,我知道我不会创建好的变量名)。我试图找到与列表中的下一个数字匹配的所有数字的总和。我让它按顺序查看项目,但当它遇到重复项时似乎被绊倒了。我运行以下代码来检查我的进度:code_string = "9511484596541141557316984781494999"list(code_string)for n in code_string: nextn = code_string[code_string.index(n)+1] if n == nextn: print(n)我得到的只是:1111111为什么它在我的列表中跳来跳去,而不是按顺序移动到下一个?它与将字符串转换为列表有关吗?我想最终用一个更大的列表来做这件事。
2 回答

子衿沉夜
TA贡献1828条经验 获得超3个赞
index返回字符串中数字的第一个索引并对字符串执行O(n)查找。你不想使用那个。
要么用于enumerate产生索引和值(但您必须测试索引是否不是最后一个,否则这个 +1 将使您的程序崩溃)或zip将字符串与缺少第一个元素的切片版本交错():这提供一个项目及其后继者。
然后你可以比较:
code_string = "9511484596541141557316984781494999"
for d1,d2 in zip(code_string,code_string[1:]):
if d1==d2:
print(d1)
输出:
1
1
5
9
9
可以通过经典方式找到这些数字的总和,或者在一行中使用sum生成器理解(在求和之前将数字转换为整数):
result = sum(int(d1) for d1,d2 in zip(code_string,code_string[1:]) if d1==d2)
(这是25)

翻翻过去那场雪
TA贡献2065条经验 获得超14个赞
尝试跟踪两个索引,而不是遍历列表中的实际项目:
for i in range(0,len(code_string)):
if code_string[i] == code_string[i+1]:
print(code_string[i])
添加回答
举报
0/150
提交
取消