需求:将一组数值分为三个等级,分别是1、2、3,要求相同数值为一个等级,只有两个数值时,只存在1和3等级,只有一个数值时,只存在3等级,OK,上手。

我们先随机生成一个存放100个数值的list,随机范围为0~1000:

import random
import math

a = list()
for i in range(1, 101):
    a.append(random.randint(0, 1000))

OK,list生成完成,我们先对这组数据去重:

new_a = list(set(a))
new_a.sort()

去重完成,生成一个新的list,并且对其升序排序。

取出去重之后list的最大值

max_count = max(new_a)

获取新list的长度

data_len = len(new_a)

利用数据的长度计算2等级的开始索引和结束索引并向下取整,开始索引=data_len / 3,结束索引=data_len *(2/3)

beg_level = math.floor(data_len / 3)
end_level = math.floor(data_len * (2 / 3))

通过索引从新list中取出数值,由于list的索引时从0开始,所以取值时索引需要减1

beg_count = new_a[beg_level - 1]
end_count = new_a[end_level - 1]

OK,到这里,准备工作完成了,开始正式工作

对原list进行遍历,对列表内每个数值进行分级,在遍历过程中我们需要判断新list的长度,如果数据长度等于2,需判断当前数值 i 是否小于最大数值,小于级别为1,否则为3,如果数据长度等于1,级别为2,数据长度大于2,判断当前数值小于或等于开始数值,级别为1,当前数值大于开始数值且小于等于结束数值,级别为2,当前数值大于结束数值,级别为3

for i in a:
    if data_len == 2:
        if i < max_count:
            level = 1
        else:
            level = 3
    elif data_len == 1:
        level = 2
    else:
     
        if i <= beg_count:
            level = 1
        elif beg_count < i and end_count >= i:
            level = 2
        else:
            level = 3

OK,大功告成!经过测试,没有发现其他问题,如果有更好的方案请留言,万分感谢!!!下面贴上完整代码

import math
import random

a = list()
for i in range(1, 101):
    a.append(random.randint(0, 1000))

a.sort()
new_a = list(set(a))
new_a.sort()
max_count = max(new_a)

data_len = len(new_a)
beg_level = math.floor(data_len / 3)
end_level = math.floor(data_len * (2 / 3))
beg_count = new_a[beg_level - 1]
end_count = new_a[end_level - 1]

for i in a:
    if data_len == 2:
        if i < max_count:
            level = 1
        else:
            level = 3
    elif data_len == 1:
        level = 2
    else:
        if i <= beg_count:
            level = 1
        elif beg_count < i and end_count >= i:
            level = 2
        else:
            level = 3
    print(i, level)
打赏

发表评论

邮箱地址不会被公开。 必填项已用*标注