如何使用交替字母值对列表进行排序,保持与相邻数值的关联

2024-06-23 03:03:58 发布

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

我有一个类似这样的python列表

[['CCND1', '67', 'FAS', '99', 'IRAK3', '92', 'ALG14', '86', 'ADRBK1', '10'], ['PTRX', '95', 'CCNA', '33']]

每个字母值都与数值相关联,即IRAK392关联(92,应该出现在IRAK3之后,PTRX95关联(95应该出现在PTRX之后)。现在,我想按字母顺序对列表进行排序,以便排序后的列表如下所示:

[['ADRBK1', '10', 'ALG14', '86', 'CCND1', '67', 'FAS', '99', 'IRAK3', '92' ], ['CCNA', '33', 'PTRX', '95' ]]

请注意,在排序列表中,字母值已排序,但再次请注意,92出现在IRAK3之后,95出现在PTRX之后,即保持关联

我怎么能这么做


Tags: 列表排序顺序字母数值fasalg14adrbk1
3条回答

“列表通常应该是同质的。对相关数据的异构集合使用元组和字典。”[1]

一种方法是将它们排列为元组,然后对它们进行排序也会更容易

mylist = [['CCND1', '67', 'FAS', '99', 'IRAK3', '92', 'ALG14', '86', 'ADRBK1', '10'], ['PTRX', '95', 'CCNA', '33']]

list_of_tuples = []
for l in mylist:
    if len(l) % 2 is not 0:
        raise ValueError()
    list_of_tuples.append([(l[i], l[i+1]) for i in range(0, len(l), 2)])

for l in list_of_tuples:
    l.sort(key=lambda tup: tup[0])

print(list_of_tuples)

# [[('ADRBK1', '10'), ('ALG14', '86'), ('CCND1', '67'), ('FAS', '99'), ('IRAK3', '92')], [('CCNA', '33'), ('PTRX', '95')]]

这是一种方法

Ex:

from itertools import chain

data = [['CCND1', '67', 'FAS', '99', 'IRAK3', '92', 'ALG14', '86', 'ADRBK1', '10'], ['PTRX', '95', 'CCNA', '33']]
#pair elements  > [('CCND1', '67'), ('FAS', '99')....
data = [zip(i[::2], i[1::2]) for i in data]
#sort and flatten 
data = [list(chain.from_iterable(sorted(i, key=lambda x: x[0]))) for i in data]
print(data)

您可以尝试以下方法:

>>> list_ = [['CCND1', '67', 'FAS', '99', 'IRAK3', '92', 'ALG14', '86', 'ADRBK1', '10'], ['PTRX', '95', 'CCNA', '33']]

>>> paired_list = (zip(*[iter(l)]*2) for l in list_)

>>> sorted_list = [list(sum(sorted(l, key=lambda x: x[0]),())) for l in paired_list]

>>> sorted_list

[['ADRBK1', '10', 'ALG14', '86', 'CCND1', '67', 'FAS', '99', 'IRAK3', '92'],
 ['CCNA', '33', 'PTRX', '95']]

参考资料:

  1. ^{}

  2. ^{}

  3. 我用了^{} to concatenate the list of tuples。但是,如果您准备使用其他模块,则最好使用^{}

相关问题 更多 >

    热门问题