Python:如何查看列表是否包含连续数字

all*_*ine 10 python list

我想测试列表是否包含连续的整数而不重复数字.例如,如果我有

l = [1, 3, 5, 2, 4, 6]
Run Code Online (Sandbox Code Playgroud)

它应该返回True.

如何在不修改原始列表的情况下检查列表是否包含最多n个连续数字?我想复制列表并删除原始列表中显示的每个数字,如果列表为空,则返回True.

有一个更好的方法吗?

wnn*_*maw 15

对于整个列表,它应该只是如此简单

sorted(l) == list(range(min(l), max(l)+1))
Run Code Online (Sandbox Code Playgroud)

这会保留原始列表,但如果列表特别长,则制作副本(然后排序)可能会很昂贵.

请注意,在Python 2中,您只需使用下面的内容,因为range返回了一个list对象.在3.x及更高版本中,函数已更改为返回range对象,因此list在进行比较之前需要进行显式转换sorted(l)

sorted(l) == range(min(l), max(l)+1))
Run Code Online (Sandbox Code Playgroud)

要检查n条目是连续的还是不重复的,它会变得更复杂一些:

def check(n, l):
    subs = [l[i:i+n] for i in range(len(l)) if len(l[i:i+n]) == n]
    return any([(sorted(sub) in range(min(l), max(l)+1)) for sub in subs])
Run Code Online (Sandbox Code Playgroud)