Python - 检查列表中是否存在所有n个数字

时间:2015-06-07 08:32:17

标签: python python-3.x

我想检查我的列表是否包含从0到列表最大数量的所有数字

对于ex,此列表包含0到7之间的所有数字:

l = [0,2,1,7,6,5,4,3] 

但是这个列表没有,因为它没有4 -

l = [0,2,1,6,5,7,3]

我尝试使用zip:

all(x==y+1 for x, y in zip(sorted(l[1:]), sorted(l)))

但这不起作用..

例如 -

l = [0,3,2,5]

没有1和4所以它应该返回false!

其中as -

l = [0,2,3,1,4,5]

包含从0到5的所有数字,因此它应该返回true!

4 个答案:

答案 0 :(得分:2)

无需使用zip多个zip功能。您可以使用sorted

if sorted(l)==list(range(max(l)+1))

示例:

>>> sorted(l)==list(range(max(l)+1))
False
>>> l= [0,2,1,7,6,5,4,3] 
>>> sorted(l)==list(range(max(l)+1))
True

答案 1 :(得分:1)

缓慢而肮脏的决心:

def f(myList):
    ll = [i for i in range(max(myList))] 
    diff = set(ll).difference(set(myList))
    if diff: return (False, diff)
    return (True, "sequence without blanks")

#lets test:
t1,t2 = [0,1,7,4,5,2],[3,5,4,2,1,0]
print(map(f,(t1,t2)))

答案 2 :(得分:1)

一如既往 - 套装是我最喜欢的 -

原始列表

l = [ 1, 2,4 3, 0, 5,6,7]

另一个比较清单

l2 = range(8)

# intersection of two sets is the set of compare list. 
# This solution would work when the size of original list is different than size of the compare list
set(l) & set(l2) == set(l2) 

答案 3 :(得分:0)

您可以尝试测试集:

len(set(l))==max(l)+1