繁体   English   中英

基于具有 x 个元素的列表对具有 n 个元素的元组进行排序

[英]Sort a tuple with n elements based on a list with x elements

我有一个如下所示的元组

all_combi= [
    ('a', 33.333333333333336),
    ('a', 38.333333333333336),
    ('a', 43.333333333333336),
    ('a', 48.333333333333336),
    ('a', 53.333333333333336),
    ('a', 58.333333333333336),
    ('a', 63.333333333333336),
    ('a', 68.33333333333334),
    ('a', 73.33333333333334),
    ('a', 78.33333333333334),
    ('a', 83.33333333333334),
    ('a', 88.33333333333334),
    ('a', 93.33333333333334),
    ('a', 98.33333333333334),
    ('b', 33.333333333333336),
    ('b', 38.333333333333336),
    ('b', 43.333333333333336),
    ('b', 48.333333333333336),
    ('b', 53.333333333333336),
    ('b', 58.333333333333336),
    ('b', 63.333333333333336),
    ('b', 68.33333333333334),
    ('b', 73.33333333333334),
    ('b', 78.33333333333334),
    ('b', 83.33333333333334),
    ('b', 88.33333333333334),
    ('b', 93.33333333333334),
    ('b', 98.33333333333334),
    ('c', 33.333333333333336),
    ('c', 38.333333333333336),
    ('c', 43.333333333333336),
    ('c', 48.333333333333336),
    ('c', 53.333333333333336),
    ('c', 58.333333333333336),
    ('c', 63.333333333333336),
    ('c', 68.33333333333334),
    ('c', 73.33333333333334),
    ('c', 78.33333333333334),
    ('c', 83.33333333333334),
    ('c', 88.33333333333334),
    ('c', 93.33333333333334),
    ('c', 98.33333333333334)]

我想根据这个列表对这个元组进行排序

instr_list. = ['a', 'b', 'c']

下面给出了预期的 output 的样品

[[
    ('a', 33.333333333333336),
    ('b', 33.333333333333336),
    ('c', 33.333333333333336)
 ], [
    [('a', 33.333333333333336),
    ('b', 38.333333333333336),
    ('c', 43.333333333333336)]
 ]]

我尝试了此处给出的以下解决方案来根据列表对元组进行排序。 但它没有给出预期的结果。 我尝试使用显式循环,但它不起作用。 任何帮助表示赞赏...

def get_slab_list(all_combi, instr_list):
    out_master_list = []
    for i in range(len(instr_list)):
        #k=0
        out_list=[]
        
        for j in all_combi:
            if j[0] == instr_list[i]:
                out_list.append(j[1])

        out_master_list.append(out_list)
    return out_master_list

sample = get_slab_list(all_combi, instr_list)

这是您可以尝试的解决方案,使用sorted + groupby

from itertools import groupby

# if data is already sorted, you can avoid this step.
all_combi = sorted(all_combi, key=lambda x: x[1])

print(
    [[i for i in v if i[0] in instr_list]  # filter out only required keys
     for _, v in groupby(all_combi, key=lambda x: x[1])]
)

[[('a', 33.333333333333336),
  ('b', 33.333333333333336),
  ('c', 33.333333333333336)],
 [('a', 38.333333333333336),
  ('b', 38.333333333333336),
  ('c', 38.333333333333336)],
...

尝试这个:

def get_slab_list(all_combi, instr_list):
    all_combi.sort()
    op = []
    div = len(all_combi)//len(instr_list)
    for i in range(div):
        tmp = []
        for j in range(len(instr_list)):
            tmp.append(all_combi[j*div + i])
        op.append(tmp)

    return op


all_combi= [('a', 33.333333333333336), ('a', 38.333333333333336), ('a', 43.333333333333336), ('a', 48.333333333333336), ('a', 53.333333333333336), ('a', 58.333333333333336), ('a', 63.333333333333336), ('a', 68.33333333333334), ('a', 73.33333333333334), ('a', 78.33333333333334), ('a', 83.33333333333334), ('a', 88.33333333333334), ('a', 93.33333333333334), ('a', 98.33333333333334), ('b', 33.333333333333336), ('b', 38.333333333333336), ('b', 43.333333333333336), ('b', 48.333333333333336), ('b', 53.333333333333336), ('b', 58.333333333333336), ('b', 63.333333333333336), ('b', 68.33333333333334), ('b', 73.33333333333334), ('b', 78.33333333333334), ('b', 83.33333333333334), ('b', 88.33333333333334), ('b', 93.33333333333334), ('b', 98.33333333333334), ('c', 33.333333333333336), ('c', 38.333333333333336), ('c', 43.333333333333336), ('c', 48.333333333333336), ('c', 53.333333333333336), ('c', 58.333333333333336), ('c', 63.333333333333336), ('c', 68.33333333333334), ('c', 73.33333333333334), ('c', 78.33333333333334), ('c', 83.33333333333334), ('c', 88.33333333333334), ('c', 93.33333333333334), ('c', 98.33333333333334)]
instr_list=['a','b','c']
sample = get_slab_list(all_combi, instr_list)
print(sample)

output:

[[('a', 33.333333333333336), ('b', 33.333333333333336), ('c', 33.333333333333336)], [('a', 38.333333333333336), ('b', 38.333333333333336), ('c', 38.333333333333336)], [('a', 43.333333333333336), ('b', 43.333333333333336), ('c', 43.333333333333336)], [('a', 48.333333333333336), ('b', 48.333333333333336), ('c', 48.333333333333336)], [('a', 53.333333333333336), ('b', 53.333333333333336), ('c', 53.333333333333336)], [('a', 58.333333333333336), ('b', 58.333333333333336), ('c', 58.333333333333336)], [('a', 63.333333333333336), ('b', 63.333333333333336), ('c', 63.333333333333336)], [('a', 68.33333333333334), ('b', 68.33333333333334), ('c', 68.33333333333334)], [('a', 73.33333333333334), ('b', 73.33333333333334), ('c', 73.33333333333334)], [('a', 78.33333333333334), ('b', 78.33333333333334), ('c', 78.33333333333334)], [('a', 83.33333333333334), ('b', 83.33333333333334), ('c', 83.33333333333334)], [('a', 88.33333333333334), ('b', 88.33333333333334), ('c', 88.33333333333334)], [('a', 93.33333333333334), ('b', 93.33333333333334), ('c', 93.33333333333334)], [('a', 98`.33333333333334), ('b', 98.33333333333334), ('c', 98.33333333333334)]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM