检查数组是否包含Python

时间:2016-01-08 19:18:29

标签: python arrays

我想检查Python中的数组是否包含递增元素,每个递增1并从0开始。例如, [0, 1, 2, 3]应返回"有效",而例如[0, 1, 3, 4][-1, 0, 1]应返回"无效"。

有没有一种简单的方法可以在Python中实现这一目标?也许内置函数?

3 个答案:

答案 0 :(得分:7)

如果问题确实如你所描述的那样,可以使用range来解决这个问题,如下所示:

myList = [...]
if myList == list(range(myList[-1] + 1)):
    # Do stuff.

答案 1 :(得分:2)

如何使用all

>>> l = [0, 1, 2, 3]
>>> not l[0] and all(y-x==1 for x,y in zip(l, l[1:]))
True
>>> l1 = [0,1,2,3,5,7]
>>> not l[0] and all(y-x==1 for x,y in zip(l1, l1[1:]))
False
>>> l2 = [0,1,2,3,4,7]
>>> not l[0] and all(y-x==1 for x,y in zip(l2, l2[1:]))
False
>>> l3=[-1,0,1,2]
>>> not l[0] and all(y-x==1 for x,y in zip(l3, l3[1:]))
False
>>> l2 = [0,1,2,3,4,5,7]
>>> not l[0] and all(y-x==1 for x,y in zip(l2, l2[1:]))
False
>>> l4=[0,2,3,4,5,7,8]
>>> not l[0] and all(y-x==1 for x,y in zip(l4, l4[1:]))
False
>>> l5=[0,2,3,4,5,6,7,8]
>>> not l[0] and all(y-x==1 for x,y in zip(l5, l5[1:]))
False

所以你可以这样把它放到一个函数中:

def check_my_list(lst):
    if not lst:
        print 'List Empty'
        return False
    test = not lst[0] and all(y-x==1 for x,y in zip(lst,lst[1:])
    return test

答案 2 :(得分:1)

我认为它可以通过功能性的单行解决:

print not len(filter(lambda i: i!=-1, [x[i]-x[i+1] for i in range(len(x)-1)]))

True的{​​{1}}和x = [0, 1, 2, 3]的{​​{1}}

说明:

False

列出了连续元素之间的差异,显然我们希望拥有所有x = [0, 1, 3, 4] ...

然后我们使用 [x[i]-x[i+1] for i in range(len(x)-1)] 来选择那些与-1不同的元素,如果至少有一个元素,则它不是递增元素,因此这样过滤后的列表的长度> 0

如果是,即只有filter,则该字段为空,我们得到的长度为0.