为了账号安全,请及时绑定邮箱和手机立即绑定

如何按顺序比较列表中的项目?

如何按顺序比较列表中的项目?

慕的地8271018 2021-08-24 19:12:44
我对编码非常陌生,正在通过一些玩具问题来学习,但遇到了这个问题。(是的,我知道我不会创建好的变量名)。我试图找到与列表中的下一个数字匹配的所有数字的总和。我让它按顺序查看项目,但当它遇到重复项时似乎被绊倒了。我运行以下代码来检查我的进度: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)


查看完整回答
反对 回复 2021-08-24
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

尝试跟踪两个索引,而不是遍历列表中的实际项目:


for i in range(0,len(code_string)):

    if code_string[i] == code_string[i+1]:

        print(code_string[i])


查看完整回答
反对 回复 2021-08-24
  • 2 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号