编号列表传输到垃圾箱

时间:2018-07-25 07:22:56

标签: python list

如果我有一个列表:

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]

3 个答案:

答案 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)