写这个是因为一个热心的豆瓣网友给我出了个思考题。菜菜如我,思考了一下,给了一份代码。
def distribution(list):
import numpy as np
#生成的列表
new_list = []
#统计有哪些数
set_list = np.unique(list)
#统计每个数出现的次数
count_list = []
for i in set_list:
count_list.append(list.count(i))
#生成字典
list1 = dict(zip(set_list,count_list))
print('list1',list1)
#出现次数排序
from operator import itemgetter
list2 =[index for index,value in sorted(enumerate(list1),key=itemgetter(1),reverse=True)]
print('list2',list2)
count_number = 0
for i in list2:
if list1[i] == 1:#出现次数为1的数字
new_list.append(i)
count_number += 1
elif list1[i] != 1:
k = list1[i]
count_number += k
for j in range(k):
new_list.insert(j * int(count_number/k),i)
print(new_list)
return new_list
list = [0,0,0,0,1,1,1,0,2,3,0,0,0,1,2,4]
distribution(list)
结果。
list1 {0: 8, 1: 4, 2: 2, 3: 1, 4: 1}
list2 [4, 3, 2, 1, 0]
[0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3]
好像还可以吧。