比较for循环中元组的整数

时间:2018-04-24 19:11:23

标签: python list

我正在尝试比较列表中的元组列表中的int值。具体来说,我有一个像这样的元组列表:

numbers_tokenized = [('2900', 368),('7,', 378),('2900', 379),('33', 384),('34', 385),('40', 386),('00', 387),('33', 389),('34', 390),('40', 391),('01', 392),('7', 410),('2900', 412),('7', 422),('191', 424),('2900', 425),('33', 428),('34', 429),('40', 430),('00', 431),('33', 433),('34', 434),('40', 435),('01', 436)]

我想做的是检查元组中的第二个元素是否是列表+ 1中元组的元素。例如,上面列表中的384,385,386,387

我认为应该完成以下循环。

cons_nums = list()
for x in range(1,len(numbers_tokenized)):
    if numbers_tokenized[x][1]-1 == numbers_tokenized[x-1][1]:
        cons_nums.append(numbers_tokenized[x-1])
    else:
        continue

然而,这给了我以下输出,这对我来说没有多大意义。

cons_nums = [('7,', 329),
 ('7,', 338),
 ('7,', 349),
 ('7,', 367),
 ('7,', 378),
 ('33', 384),
 ('34', 385),
 ('40', 386),
 ('33', 389),
 ('34', 390),
 ('40', 391),
 ('191', 424),
 ('33', 428),
 ('34', 429),
 ('40', 430),
 ('33', 433),
 ('34', 434),
 ('40', 435)]

我犯了一些明显的错误,或者为什么这不起作用?

编辑:

成功循环cons_nums看起来像这样:

cons_nums = [('7,', 378),('2900', 379),('33', 384),('34', 385),('40', 386),('00', 387),('33', 389),('34', 390),('40', 391),('01', 392),('191', 424),('2900', 425),('33', 428),('34', 429),('40', 430),('00', 431),('33', 433),('34', 434),('40', 435),('01', 436)]

2 个答案:

答案 0 :(得分:0)

我认为这可以满足您的需求:

shifted=zip(numbers_tokenized[1:],numbers_tokenized[:-1])
output=[i[1] for i,j in shifted if i[1]-1==j[1]]

编辑: 这样做,但是为了删除重复项,我使用了不维护订单的集合,如果你想要相同的订单,你可以简单地使用循环或类似的列表理解。

shifted=zip(numbers_tokenized[:-1],numbers_tokenized[1:])
output=[j for i in shifted if i[0][1]+1==i[1][1] for j in i]
output=list(set(output))

答案 1 :(得分:0)

如果你想要的话和循环:

numbers_tokenized = [('2900', 368),('7,', 378),('2900', 379),('33', 384),('34', 385),('40', 386),('00', 387),('33', 389),('34', 390),('40', 391),('01', 392),('7', 410),('2900', 412),('7', 422),('191', 424),('2900', 425),('33', 428),('34', 429),('40', 430),('00', 431),('33', 433),('34', 434),('40', 435),('01', 436)]

cons_nums = list()
for x in range(0,len(numbers_tokenized)-1):
    if numbers_tokenized[x][1]+1 == numbers_tokenized[x+1][1]:
      if numbers_tokenized[x] not in cons_nums:
        cons_nums.append(numbers_tokenized[x])
      if numbers_tokenized[x+1] not in cons_nums:
        cons_nums.append(numbers_tokenized[x+1])


print(cons_nums)

输出:

[('7,', 378), ('2900', 379), ('33', 384), ('34', 385), ('40', 386), ('00', 387), ('33', 389), ('34', 390), ('40', 391), ('01', 392), ('191', 424), ('2900', 425), ('33', 428), ('34', 429), ('40', 430), ('00', 431), ('33', 433), ('34', 434), ('40', 435), ('01', 436)]