我想测试一个列表是否包含连续的整数并且没有重复的数字。 例如,如果我有
l = [1, 3, 5, 2, 4, 6]
它应该返回 True。
在不修改原始列表的情况下,如何检查列表是否最多包含n个连续数字? 我考虑过复制列表并删除原始列表中出现的每个数字,如果列表为空,则它将返回 True。
有更好的方法吗?
最佳答案
对于整个列表,它应该像这样简单
sorted(l) == list(range(min(l), max(l)+1))
这会保留原始列表,但如果您的列表特别长,制作副本(然后排序)可能会很昂贵。
请注意,在 Python 2 中,您可以简单地使用以下内容,因为 range
返回了一个 list
对象。在 3.x 及更高版本中,函数已更改为返回 range
对象,因此在与 sorted(l)< 比较之前需要显式转换为
list
/
sorted(l) == range(min(l), max(l)+1))
要检查 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])
关于python - 如何查看列表是否包含连续数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33575235/