Python-检查列表中是否存在所有n个数字
我想检查我的列表是否包含从0到列表最大值的所有数字 对于ex,此列表包含从0到7的所有数字:Python-检查列表中是否存在所有n个数字,python,python-3.x,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 其中— l = [0,2,3,1,4,5] 具有从0到5的
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
其中—
l = [0,2,3,1,4,5]
具有从0到5的所有数字,因此它应该返回true 无需将
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
缓慢而肮脏的孤独:
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)))
和往常一样,布景是我最喜欢的 原始列表
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)
您可以尝试测试集:
len(set(l))==max(l)+1
这不管用。。。我想检查从0到n的所有数字是否都存在,n是列表中的最大数字。对于ex-如果列表中的最大数字为5,则无论顺序如何,都应显示0,1,2,3,4,5。@为什么?你说的是从0到列表最大数的所有数字,这就是你想要的。虽然在原始问题中没有提到-我担心这个解决方案不会起作用-如果原始列表有重复项并且比比较列表有更多的元素。例如,
l=[0,1,2,4,5,6,8,2,7,2,4,5]
(不包含3,2,4,5是重复的)。但是同意,在最初的问题中没有提到两个列表是否大小相同。@Gabijit这是另一种情况,可以通过set