使用加法来比较列表项

时间:2012-08-03 11:41:21

标签: python list compare addition

我有一个嵌套列表,其中包含一个整数作为每个列表的最后一个元素,我试图查看列表中的下一个项目是否比当前项目多一个,即如果当前列表的最后一个元素是104,如果下一个列表的最后一个元素是105,那就做点什么。

data=[[a,b,c,1200],[a,g,x,3401],[f,a,c,3402],[f,a,c,3403]etc]
for item in data:
    if next(item[-1])==item[-1]+1: #if next item is this item plus one
        #do something

这不断提高TypeError: Can't convert 'int' object to str implicitly,我不知道为什么。有没有办法使用add来比较python中我不知道的列表元素?

(下一个(项目)部分可能不准确,因为我使用函数来获取完整代码中的上一个和下一个项目,而不是next(),但原则上是相同的)

3 个答案:

答案 0 :(得分:2)

您的错误消息是由于您使用了item[1],而您似乎打算item[-1]。但是,修复此问题无法修复您的代码 - next(item[-1])没有意义。我建议使用itertools.groupby()重构此循环:

from itertools import groupby, count
c = count()
for key, group in groupby(data, lambda x: x[-1] - next(c)):
    for item in group:
        # whatever

这会将data分区为子列表的最后一个元素中的连续整数运行组。每个内部循环将在单独的连续运行中运行,如果需要,您可以在此内部循环之前添加设置代码。

答案 1 :(得分:1)

这将做你想要的。

data=[[a,b,c,1200],[a,g,x,3401],[f,a,c,3402],[f,a,c,3403]etc]
previous = 0 # adjust if necessary
for item in data:
    if item[-1] == previous + 1:
        #do something
    previous = item[-1]

next(item[-1])没有按你的想法行事。你可以通过应用一些推理来自己推断出这个:

  1. next(),没有收到您想要的“下一个”元素的实际前体,即item
  2. 如果您要通过item,则next()必须找出item所属的列表。
  3. 如果item位于多个列表中该怎么办?如果它在同一个列表中多次出现怎么办?要返回哪个项目?
  4. 正如您所看到的,通过简单地传递一些恰好属于某些列表的随机对象,无法获得列表中的下一个项目。

    next()实际上做的是完全不同的。它为您提供了从迭代器/生成器生成的下一个项目。

答案 2 :(得分:0)

您需要正确转换类型。

if int(next(item[-1])) == int(item[1]) + 1:

另外,我不明白你为什么不这样做

 if int(item[0]) == int(item[1]) + 1:

如果转换失败,请准备好抓住ValueError