2014-02-27 105 views
1

我有這樣的元組的列表:從元組列表修改每個元組(並最終只刪除)

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

我想要做的是:

  1. 以每條記錄並分析兩個數字之間的差異;
  2. 如果這個差異不是零,那麼我想追加第三個元素,這實際上是這兩個數字的區別;如果它爲零,我只想將元組拉出列表。

最後的輸出,因此,會是這樣:

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)並將其移除時,而不是將元素(10,14)保存在內存中,它將保存元素(16,16)。我有一個模糊的想法,爲什麼發生這種情況(可能for循環正在照顧元素的位置?),但我不知道如何解決它。有沒有優雅的方式,或者我應該使用一些控制變量來考慮列表中元素的位置? tups =元組(tups) tradeRanges.append(tups)

回答

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)] 
+2

+1嘿,43秒打我:P –

+1

您在4分鐘解決什麼我掙扎大約兩個小時。那麼,謝謝(它完美地工作)! –

+0

p.s.我會在8分鐘內接受這個答案;) –