如何使用python在列表中的中心索引位置周围均匀分布唯一的项?

2024-09-27 00:15:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我在继续我的工作流程时遇到问题。我正在使用vanilla python尝试将字符串列表按某种均匀分布的顺序排序

输入是一个给定的长度,然后将其分割以收集列表中所需的唯一实例的数量。然后,需要围绕列表中心索引对该列表进行尽可能均匀的排序

输入列表: C、 C,C,C,C,B,B,AB

预期输出列表: C、 B,C,AB,C,B,C,C

我太困了,请帮帮我

迄今为止的代码:

import math

def AddItem(list,item,index):
    result = [] 
    for idx, ele in enumerate(list): 
    # if index multiple of N 
        if idx % index == 0: 
        # extend to append all elements 
            result.extend(item) 
        result.append(ele) 
    return result

lengths = [14421.46,691.99,6992.992,6946.004]
spacings = [8025,3210,1605]

result = []

spacings1 = []
for s in spacings:
    if s == None:
        pass
    else:
        spacings1.append(s)

divisions = []
nums = []

for l in lengths:
    pack = []
    for s in spacings1:
        n = math.ceil(l/s)
        if n < 1:
            r = 1
        else:
            r = n
        pack.append(r)
    nums.append(pack)

for p in nums:
    types = []
    l_num = p[0]
    for x in xrange(l_num):
        types.append("AB")
    t_num = p[1]-p[0]
    for x in xrange(t_num):
        types.append("B")
    try:
        g_num = p[2]
        for x in xrange(g_num):
            types.append("C")
    except:
        pass
    
    result.append(types)
    
OUT = result

Tags: in列表forindexifab排序result
1条回答
网友
1楼 · 发布于 2024-09-27 00:15:02

您可以将1除以每个唯一项的数量再加上1,得到该项的分数,并将这些项划分为分数的倍数,以便所得倍数可用作排序键:

from collections import Counter
from operator import itemgetter

lst = ['C', 'C', 'C', 'C', 'C', 'B', 'B', 'AB']
print(
    list(
        map(
            itemgetter(1),
            sorted(
                ((i + 1) / (count + 1), item)
                for item, count in Counter(lst).items()
                for i in range(count)
            )
        )
    )
)

这将产生:

['C', 'B', 'C', 'AB', 'C', 'B', 'C', 'C']

相关问题 更多 >

    热门问题