Python中具有自定义顺序的排序列表

2024-04-26 09:25:19 发布

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

你好我目前有两个列表,如下所示:

list1 = [Alpha, Beta, Charlie, Delta, Echo] 

list2 = [B, A, E, C, D]

我想使用list2对list1排序,我尝试使用:

list1.sort(key=list2.index)

然而,这些字母在单词中找不到。有没有一种方法可以不使用每个列表的全名来对列表1进行排序


Tags: 方法keyechoalpha列表index排序字母
2条回答

您必须按照单词的第一个字母排序:

list1 = ['Alpha', 'Beta', 'Charlie', 'Delta', 'Echo'] 

list2 = ['B', 'A', 'E', 'C', 'D']

out = list(sorted(list1, key=lambda word: list2.index(word[0])))
print(out)
# ['Beta', 'Alpha', 'Echo', 'Charlie', 'Delta']

index每次都必须在list2上迭代。建立一个dict,首先给出每个字母的索引,这样我们在排序时可以在O(1)中找到索引,可能会更有效:

list1 = ['Alpha', 'Beta', 'Charlie', 'Delta', 'Echo'] 

list2 = ['B', 'A', 'E', 'C', 'D']
dict2 = {letter: index for index, letter in enumerate(list2)}

out = list(sorted(list1, key=lambda word: dict2[word[0]]))
print(out)
# ['Beta', 'Alpha', 'Echo', 'Charlie', 'Delta']

numpy数组在这里非常有用:

import numpy as np
indices = np.searchsorted(list1, list2) #numpy array [1 0 4 2 3]

现在我们有了索引,可以告诉从列表1中获取的名称的顺序。现在我们可以通过两种方式访问输出:

第一种方式(使用列表理解):

list1[i for i in indices]

第二种方法(使用numpy索引数组):

list(np.array(list1)[indices])

输出:

['Beta', 'Alpha', 'Echo', 'Charlie', 'Delta']

相关问题 更多 >