如何依次比较列表中的项目?

时间:2018-11-22 05:21:11

标签: python python-3.x

我对编码非常陌生,正在玩一些玩具问题来学习,但是与此有关。 (是的,我知道我没有很好的变量名)。

我正在尝试查找与列表中下一位数字匹配的所有数字的总和。我让它按顺序查看项目,但是当它碰到重复项目时似乎被绊倒了。我运行以下代码来检查进度:

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

为什么它在我的列表中跳来跳去而不是按顺序前进到下一个?它与将字符串转换为列表有关吗? 我最终希望通过更大的列表来做到这一点。

2 个答案:

答案 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])