2012-08-03 95 views
0

我有一個嵌套的列表,其中包含一個整數作爲每個列表的最後一個元素,我試圖查看列表中的下一個項目是否比當前項目多一個,即如果當前列表的最後一個元素是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,我不知道爲什麼。有沒有一種方法可以用來比較python中我不知道的列表元素?

(下(項目)的一部分可能是不準確的,因爲我使用一個函數來獲得完整的代碼前面和後面的項目,而不是下一個(),但它在原理上是一樣的)

回答

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. ,如果你是通過itemnext()將不得不找出什麼名單item是一部分。
  3. 如果item位於多個列表中,該怎麼辦?如果它出現在同一個列表中多次?哪個項目要返回?

正如你所看到的,有沒有可能的方式通過簡單地傳遞,恰好是一些列表部分一些隨機的對象來獲取列表中的下一個項目。

next()實際上做的是完全不同的。它爲您提供從迭代器/生成器生成的下一個項目。

+0

謝謝!但是,這仍然會引發TypeError:不能將int對象隱式轉換爲str – Snaaa 2012-08-03 12:03:33

+0

@Snaa:那麼您的'data'不會顯示在我的代碼中。你可能需要用'int()'來包裝'item [-1]'。 – phant0m 2012-08-03 12:04:34

+1

@Snaaa:數據中的最後一個元素是否可能不是實際的整數? – 2012-08-03 12:04:48

0

你需要正確地轉換你的類型。

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

另外,我不理解爲什麼你不只是做

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

準備捕獲一個ValueError如果轉換失敗。

+0

謝謝!我試圖比較嵌套列表中列表的最後一個元素與嵌套列表中下一個列表的最後一個元素,因此next()。添加int()會導致ValueError:int()的基數爲10的無效文字:'Unique \ n' – Snaaa 2012-08-03 11:51:58

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在子列表的最後一個元素整數的連續運行的羣體。每個內部循環將運行一個單獨的連續運行,如果需要,您可以在此內部循環之前添加設置代碼。

+0

哎呀,這是一個錯字,它應該是item [-1]。我使用nosklo的答案從http://stackoverflow.com/questions/1011938/python-previous-and-next-values-inside-a-loop獲得下一個項目 – Snaaa 2012-08-03 11:53:38

+0

@Snaaa:我的答案的重點是你不需要訪問上一個和下一個項目來檢測連續運行,所以無論你的錯字是什麼,這個答案都應該提供一種解決問題的替代方法。 – 2012-08-03 11:56:02

+1

哇,'groupby'和'count'的奇妙運用。驚人。 – 2012-08-03 11:56:45