我有一个嵌套列表,其中包含一个整数作为每个列表的最后一个元素,我试图查看列表中的下一个项目是否比当前项目多一个,即如果当前列表的最后一个元素是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(),但原则上是相同的)
答案 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])
没有按你的想法行事。你可以通过应用一些推理来自己推断出这个:
next()
,没有收到您想要的“下一个”元素的实际前体,即item
item
,则next()
必须找出item
所属的列表。item
位于多个列表中该怎么办?如果它在同一个列表中多次出现怎么办?要返回哪个项目?正如您所看到的,通过简单地传递一些恰好属于某些列表的随机对象,无法获得列表中的下一个项目。
next()
实际上做的是完全不同的。它为您提供了从迭代器/生成器生成的下一个项目。
答案 2 :(得分:0)
您需要正确转换类型。
if int(next(item[-1])) == int(item[1]) + 1:
另外,我不明白你为什么不这样做
if int(item[0]) == int(item[1]) + 1:
如果转换失败,请准备好抓住ValueError
。