[英]How to Uniformly distribute Objects based on an attribute in a list?
可以说,我有一个对象集合或列表{AABABBCCCDDEEDFFF}
该列表是随机填充的。 现在我要它重新排列列表,如下所示
{ABCDEFABCDEFABCDF}
一种方法是为现有列表中的每个元素创建存储桶,然后遍历每个存储桶,依次选择并添加期望列表中的元素,直到所有存储桶都存在。
您可以动态使用存储桶。 举个例子:
快速版本:
当存储桶和输入序列不为空时:
较少的内存使用版本
假设输入仅是AZ字母。 因此,在这种情况下,您将只有26个可能的字符。 因此,一旦输入存储在哈希表中,只需使用哈希表存储输入字符的计数。 现在只需使用此函数即可获取输出。
while(哈希中有任何项){
for(i 1至26){
打印每个非零计数字符和减计数
}
}
将对象放到哈希图中,将它们的值作为键,并输入出现次数的计数器(还保留插入顺序)。 然后,要创建输出列表,请在映射中的键上进行迭代并附加每个键值,同时减少其计数。 重复直到地图用尽。 这是python中的代码:
from collections import OrderedDict
def arrange(l):
d=OrderedDict()
for x in l:
d[x]=d.setdefault(x, 0)+1
r=[]
while len(d)>0:
for x in d:
r.append(x)
d[x]-=1
if d[x]==0:
del d[x]
return r
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.