是否有检查列表连续性的功能?

时间:2019-06-18 08:47:01

标签: python python-3.x

我正在建立一个新脚本,在该脚本中,我需要检查列表中是否所有元素都在2个数字之间,以检查此列表的连续性。

此刻,我尝试添加最小值和最大值,并将其与列表中元素的数量进行比较。

if max+min > 2*count:
   continuity = 'no'
else:
   continuity = 'yes'

更新

这不是重复的问题。我将用进一步的信息解释我的问题。我想检查是否对每个X值和Y值都实现了研究。

例如,我得到4分,

X=[1, 1, 2, 2]
Y=[1, 1, 2, 2]

引用X1=(1,1)X2=(1,2)等。

此刻,我尝试了2格:

countY = dict([(k, Y.count(k)) for k in set(Y)])
countX = dict([(k, X.count(k)) for k in set(X)])

我将其与最大值和最小值进行比较,但是我只是搜索一个函数(如果存在),该函数可以减少行数。

1 个答案:

答案 0 :(得分:3)

您可以执行此操作,以处理重复的元素:

assert len(set(my_list) - set(range(min, max))) == 0 

喜欢

my_list = [2, 2, 3, 1, 4]
min = 1
max = 5
ref = set(range(min, max)) # all the elements you want, in a set
assert len(set(my_list) - ref) == 0
# or
assert all(x in ref for x in my_list)
# or 
assert sorted(my_list) == sorted(ref) # fails if there are repeating element in my_list

测试:

import random

def f(l, min, max):
    assert sorted(l) == list(range(min, max))

def g(l, min, max):
    s = set(l)
    ref = set(range(min, max))
    assert len(s - ref) == 0

def h(l, min, max):
    s = set(l)
    ref = set(range(min, max))
    assert all(x in ref for x in s)

min = -100
max = 100
l = list(range(min, max))
random.shuffle(l)

%timeit f(l, min, max)
#28.2 µs ± 6.1 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
%timeit g(l, min, max)
#12.5 µs ± 1.52 µs per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%timeit h(l, min, max)
#28.8 µs ± 12 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)