【问题标题】:Matching values for a list in python [duplicate]python中列表的匹配值[重复]
【发布时间】:2017-06-07 18:21:44
【问题描述】:

初学者问题:我正在尝试评估一行中的两个值是否匹配。

a = ['sl','sl','cr','cl']

这是我当前的代码:

while (j+1) < len(a):
    if a[j] == a[j+1]:
        num = num + 1
    else: 
        num = num

但是,当我这样做时,它不会计算列表中的第一个值 - 这是由于 (j+1),但是,如果我删除它,则会收到错误消息,告诉我我的索引超出范围 - 任何建议将不胜感激。

【问题讨论】:

  • num = len(a) - len(set(a))?请注意,else 可以删除,并且您的方法仅检查直接邻居。
  • 从0开始,比最后一个索引少1。 @MosesKoledoye 你在那里缺少另一个镜头吗? :)
  • 如果一个值出现 3 次怎么办?你想增加计数器一次还是两次?
  • 这也不能是你当前的代码,因为你从来没有真正增加 j。
  • a = ['sl','sl','sl','cr','cl', 'bob'] 的结果会是什么?

标签: python list while-loop


【解决方案1】:

您应该在代码中改进一些内容。 首先,循环enumerate(list) 以轻松比较列表中的项目。 其次,IndexError 可用于在到达最后一个索引后退出循环。 这是一个--easy-to-read--示例。

for i,item in enumerate(a):
    try:
        if item = a[i+1]:
            print(item, 'and', a[i+1], 'are the same')
            #increment your counter here
    except IndexError:
        break

【讨论】:

  • 你总是可以遍历enumerate(a[:-1]) 来避免IndexErrror。或a[1:] 并使用前一个值而不是下一个...(您也可能希望在if 中使用==
  • @Baldrickk 确实,这对初学者来说是一个很好的建议。我更喜欢我的方式,我觉得它更明确,但谢谢!
猜你喜欢
  • 2016-08-31
  • 2023-02-13
  • 2019-04-04
  • 2014-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-27
  • 2022-11-10
相关资源
最近更新 更多