我对编码非常陌生,正在玩一些玩具问题来学习,但是与此有关。 (是的,我知道我没有很好的变量名)。
我正在尝试查找与列表中下一位数字匹配的所有数字的总和。我让它按顺序查看项目,但是当它碰到重复项目时似乎被绊倒了。我运行以下代码来检查进度:
code_string = "9511484596541141557316984781494999"
list(code_string)
for n in code_string:
nextn = code_string[code_string.index(n)+1]
if n == nextn:
print(n)
我得到的是:
1
1
1
1
1
1
1
为什么它在我的列表中跳来跳去而不是按顺序前进到下一个?它与将字符串转换为列表有关吗? 我最终希望通过更大的列表来做到这一点。
答案 0 :(得分:6)
index
返回字符串中数字的 first 索引,并对字符串进行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
)
答案 1 :(得分:0)
尝试跟踪两个索引,而不要遍历列表中的实际项目:
for i in range(0,len(code_string)):
if code_string[i] == code_string[i+1]:
print(code_string[i])