2014-09-24 81 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