我对编码非常陌生,正在玩一些玩具问题要学习但是已经碰到了这个问题. (是的,我知道我没有做出好的变量名称).
我试图找到与列表中下一个数字匹配的所有数字的总和.我让它按顺序查看这些项目但是当它碰到一个副本时它似乎被绊倒了.我运行以下代码来检查我的进度:
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
为什么它会在我的列表中跳转而不是按顺序移动到下一个?它是否与将字符串转换为列表有关?
我想最终用更大的列表来做这件事.
最佳答案 index返回字符串中数字的第一个索引,并对字符串执行O(n)查找.你不想使用它.
使用枚举来产生索引&值(但你必须测试索引是否不是最后一个,这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)