我想检查我的列表是否包含从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!
答案 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