Python 查找一系列列表中缺少的整数

Python 查找一系列列表中缺少的整数,python,Python,你好, 我发现这个话题真的很有帮助。 我发现第二个答案非常有用,现在将其应用到我的代码中: def missing_elements(X): start, end = X[0], X[-1] return sorted(set(range(start, end + 1)).difference(X)) 现在,问题是我没有一个列表,而是一系列的列表,这是一个快照: [716, 717, 718, 719, 720, 721] [761, 762, 763, 764, 765, 7

你好, 我发现这个话题真的很有帮助。
我发现第二个答案非常有用,现在将其应用到我的代码中:

def missing_elements(X):
    start, end = X[0], X[-1]
    return sorted(set(range(start, end + 1)).difference(X))
现在,问题是我没有一个列表,而是一系列的列表,这是一个快照:

[716, 717, 718, 719, 720, 721]
[761, 762, 763, 764, 765, 766, 767, 768]
[988, 989, 990, 993, 994]
我希望看到这样的结果:

[0]
[0]
[991, 992]

显然,上面的代码不起作用。但我不知道如何让它工作。我得到的印象是,我可能想将此设置为一个集合并对其进行处理,但这只是一个猜测…

首先,作为一种更具python风格的方式,您可以使用以下函数来检测缺少的项,然后使用列表理解将该函数应用于列表:

>>> from itertools import chain
>>> def missing(iterable):
...     return chain.from_iterable(range(i+1, j) for i, j in zip(iterable, iterable[1:]) if j > i + 1)
演示:

>>> lst = [[716, 717, 718, 719, 720, 721],
... [761, 762, 763, 764, 765, 766, 767, 768],
... [988, 989, 990, 993, 994]]
... 
>>> [list(missing(i)) for i in lst]
[[], [], [991, 992]]
>>> 
下面是一个带有您建议的函数的基准测试,表明此函数快了近2倍:

~ $ python -m timeit --setup "from itertools import chain; iterable=range(100)" "chain.from_iterable(range(i+1, j) for i, j in zip(iterable, iterable[1:]) if j > i + 1)"
100000 loops, best of 3: 3.68 usec per loop
~ $ python -m timeit --setup "iterable=range(100)" "start, end = iterable[0], iterable[-1]; sorted(set(range(start, end + 1)).difference(iterable))"
100000 loops, best of 3: 6.94 usec per loop
仅将现有函数添加到一系列列表中:

> lsts = [[716, 717, 718, 719, 720, 721],
          [761, 762, 763, 764, 765, 766, 767, 768],
          [988, 989, 990, 993, 994]]
> map(missing_elements, lsts)
[[], [], [991, 992]]

上面的代码正在运行。请参见将此函数应用于列表很容易:对于列表中的列表使用
:打印缺少的元素(a)
map
您只是忘记了为函数中的行添加缩进。工作很好。