如果我有一个列表:
a=[6,3,2,5,1,4]
,特定尺寸为3, 所以数字1〜2会标记1、3〜4标记2、5〜6标记3,喜欢列表b:
b=[3,2,1,3,1,2]
如何有效地做到这一点? 请注意,列表可能是浮点数
很抱歉,描述不清楚, 使用更复杂的示例进行更新:
a=[2.5,1.4,1.6,2.1,1.5,0.7]
输出将是:
b=[3,1,2,3,2,1]
答案 0 :(得分:1)
这就是您需要的:
import math
a=[6,3,2,5,1,4]
size = 3
b = list(a)
b.sort()
for i in range(len(a)) :
w = len(b)/size #1
a[i] = math.ceil((b.index(a[i]) + 1)/(w)) #2
print(a)
1:我们正在获取每个块的长度
2:我们要获取已排序列表中出现的数字所在的块,然后将其替换为原始列表中的块编号
答案 1 :(得分:1)
您可以通过首先订购列表和splitting it into chunks of the desired size来实现:
a=[6,3,2,5,1,4]
n = 3
a_ord = sorted(a)
def split_list(alist, wanted_parts=1):
length = len(alist)
return [ alist[i*length // wanted_parts: (i+1)*length // wanted_parts]
for i in range(wanted_parts) ]
x = split_list(a_ord,n)
然后使用这些大块作为箱来创建字典:
d = {j:x.index(i)+1 for i in x for j in i}
print(d)
>>> {1: 1, 2: 1, 3: 2, 4: 2, 5: 3, 6: 3}
然后使用字典映射值:
b = [d[key] for key in a]
print(b)
>>> [3, 2, 1, 3, 1, 2]
答案 2 :(得分:-2)
sample_dict = {
1 : 1,
2 : 1,
3 : 2,
4 : 2,
5 : 3,
6 : 3
}
for k in a:
out_arr.append(sample_dict[k])
print (out_arr)