python-3.x 是否有检查列表中的连续性的功能?

cgyqldqp  于 2023-08-08  发布在  Python
关注(0)|答案(1)|浏览(113)

我设置了一个新的脚本,我需要检查一个列表是否包含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个dict:

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


我将它与最大值和最小值进行比较,但我只是搜索一个函数(如果存在的话),它允许我这样做,使用更少的行。

nfs0ujit

nfs0ujit1#

你可以这样做,它处理重复的元素:

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)

相关问题