Python 将一组数分三等级
需求:将一组数值分为三个等级,分别是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)