我正在建立一个新脚本,在该脚本中,我需要检查列表中是否所有元素都在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)])
我将其与最大值和最小值进行比较,但是我只是搜索一个函数(如果存在),该函数可以减少行数。
答案 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)