迭代列表列表并在这些列表中查找连续数字

时间:2014-09-24 21:58:50

标签: python list nested

目前我正在尝试在嵌套列表中查找连续数字。我的目标是以下示例:

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

输出:(1,2,3), (7,8,9)

如果有三个以上的列表,它也应该有用。列表的数量可能会有所不同。

(背景为此;我正在为学校建立搜索引擎,嵌套中的数字是用户提供的查询单词的位置。)

我用过:

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

查看整数是否连续。我也尝试过itertools.izip。但是,这不允许我改变我想要迭代的列表数量。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分: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)]