您好,我目前有两个列表,如下所示:
list1 = [Alpha, Beta, Charlie, Delta, Echo]
list2 = [B, A, E, C, D]
我想使用list2对list1进行排序,我尝试过使用:
list1.sort(key=list2.index)
但是,在单词中找不到这些字母。有没有办法对 list1 进行排序而不需要全名?
最佳答案
您必须根据单词的第一个字母进行排序:
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
。首先构建一个给出每个字母索引的字典可能会更有效,这样我们在排序时可以在 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']
关于python - 在Python中使用自定义顺序对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59237473/