2024-04-26 09:25:19 发布
网友
你好我目前有两个列表,如下所示:
list1 = [Alpha, Beta, Charlie, Delta, Echo] list2 = [B, A, E, C, D]
我想使用list2对list1排序,我尝试使用:
list1.sort(key=list2.index)
然而,这些字母在单词中找不到。有没有一种方法可以不使用每个列表的全名来对列表1进行排序
您必须按照单词的第一个字母排序:
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)中找到索引,可能会更有效:
index
list2
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数组在这里非常有用:
numpy
import numpy as np indices = np.searchsorted(list1, list2) #numpy array [1 0 4 2 3]
现在我们有了索引,可以告诉从列表1中获取的名称的顺序。现在我们可以通过两种方式访问输出:
list1[i for i in indices]
list(np.array(list1)[indices])
['Beta', 'Alpha', 'Echo', 'Charlie', 'Delta']
您必须按照单词的第一个字母排序:
index
每次都必须在list2
上迭代。建立一个dict,首先给出每个字母的索引,这样我们在排序时可以在O(1)中找到索引,可能会更有效:numpy
数组在这里非常有用:现在我们有了索引,可以告诉从列表1中获取的名称的顺序。现在我们可以通过两种方式访问输出:
第一种方式(使用列表理解):
list1[i for i in indices]
第二种方法(使用numpy索引数组):
list(np.array(list1)[indices])
输出:
['Beta', 'Alpha', 'Echo', 'Charlie', 'Delta']
相关问题 更多 >
编程相关推荐