修改元组列表中的每个元组(最终只是删除)

时间:2014-02-27 16:17:52

标签: python list tuples

我有一个像这样的元组列表:

tradeRanges = [(0,3), (10,14), (16,16), (21,23), (25,25)]

我想做的是:

  1. 取每个元组并分析两个数字之间的差异;
  2. 如果这个差异不为零,那么我想追加第三个元素,这实际上是这两个数字的差异;如果它为零,我只想把元组从列表中拉出来。
  3. 因此,最终输出将是:

    tradeRanges = [(0,3,3), (10,14,4), (21,23,2)]
    

    出于这个目的,我尝试编写以下脚本:

    for tups in tradeRanges:
        tradeRanges.remove(tups)
        tups = list(tups)
        lenTup = tups[1]-tups[0]
        if lenTup > 0:
            tups.append(lenTup) #so when it's done I would have the list into the same order
            tups = tuple(tups)
            tradeRanges.append(tups)
    

    这里的问题是它会跳过元素。当它获得元素(0,3)并将其删除时,它将保存元素(16,16)而不是在内存中保存元素(10,14)。我有一个模糊的想法,为什么会发生这种情况(可能for循环正在处理元素的定位?)但我不知道如何修复它。有没有优雅的方法或者我应该使用一些控制变量来考虑列表中元素的位置?             tups =元组(tups)             tradeRanges.append(tups)

1 个答案:

答案 0 :(得分:5)

tradeRanges = [(0,3), (10,14), (16,16), (21,23), (25,25)]
print [(n1, n2, abs(n1-n2)) for n1, n2 in tradeRanges if n1 != n2]
# [(0, 3, 3), (10, 14, 4), (21, 23, 2)]