2014-09-24 82 views
-1

當前我正在嘗試在嵌套列表中查找連續的數字。我的目標是下面的例子:迭代列表並在這些列表中查找連續的數字

nested = [ [1,7,13], [2,5,8], [3, 6, 9] ] 

OUTPUT:(1,2,3), (7,8,9)

還應該工作,如果有三個以上的列表。列表的數量可能會有所不同。

(背景爲這個,我是建設學校和搜索引擎在用戶給出的查詢詞的嵌套的位置的數字。)

我用:

def is_coherent(x): 
    return all(np.diff(x) == 1) 

到看看整數是否連續。我也嘗試過itertools.izip。然而,這不允許我改變我想要迭代的列表數量。

任何幫助將不勝感激!

+0

是烏拉圭回合的輸出是否正確? – 2014-09-24 22:01:55

+1

爲什麼/如何從中輸出'(7,8,9)'? – user2864740 2014-09-24 22:03:03

+0

其我想要的輸出,對不起=)我想在多個列表中找到連續的數字。在列表1中,我發現7,在2:8和3:9中。 – 2014-09-24 22:16:39

回答

2

我想你想從內部列表中,其所有項目都是連續的笛卡爾積的項目,對,你可以嘗試這樣的事:

from itertools import izip, product 

def find_continuous_items(data): 
    for p in product(*data): 
     if all(b-a==1 for a, b in izip(p, p[1:])): 
      yield p 

nested = [[1,7,13], [2,5,8], [3, 6, 9]] 
print list(find_continuous_items(nested)) 
#[(1, 2, 3), (7, 8, 9)] 
+0

非常感謝,現在都在工作=) – 2014-09-24 22:42:15