Python 相对于其他列表中的单词对列表进行排序

Python 相对于其他列表中的单词对列表进行排序,python,python-3.x,sorting,Python,Python 3.x,Sorting,我想根据其他列表中的单词对列表中的单词进行排序。这里我的列表包含三个单词字符串Tom Cruise Gerald,我必须根据基本列表中的单词(即Gerald Tom Cruise)重新排列此列表 只是想找到一个最好的方法来实现这一点: 我的名单: ['Tom Cruise Gerald'] 用于排序的基本列表: ['Gerald Tom Cruise'] ['Gerald Tom Cruise'] 我的列表的输出: 这是我们的名单。为了排序l,我们通常使用l.sort()。但是你看列表。排

我想根据其他列表中的单词对列表中的单词进行排序。这里我的列表包含三个单词字符串Tom Cruise Gerald,我必须根据基本列表中的单词(即Gerald Tom Cruise)重新排列此列表

只是想找到一个最好的方法来实现这一点:

我的名单:

['Tom Cruise Gerald']
用于排序的基本列表:

['Gerald Tom Cruise']
['Gerald Tom Cruise']
我的列表的输出:

这是我们的名单。为了排序
l
,我们通常使用
l.sort()
。但是你看<代码>列表。排序接受参数
!这是一个函数,它接受每个值并输出一个数字,我们可以将其用作订购者。因此,让我们使用“主控中的位置”:

这给了我们:

['the', 'jumped', 'dog']

成功

您可以创建一个用于快速查找的排序字典,并将其用作

data = 'Tom Cruise Gerald'.split()
sort = 'Gerald Tom Cruise'.split()
sort_dct = {d: s for d, s in zip(data, sort)}

print(sorted(data, key=sort_dct.get))
或者如果您想将其返回到
str

print(' '.join(sorted(data, key=sort_dct.get)))

请注意,
['Tom Cruise Gerald']
是一个包含单个
str
元素的列表。

您可以使用dict comprehension和
enumerate
从参考列表创建关键字到索引的映射,以便您可以轻松地使用映射索引对给定列表进行排序,该映射索引的平均查找成本为O(1):

reference = ['Gerald', 'Tom', 'Cruise']
index = {k: i for i, k in enumerate(reference)}
print(sorted(['Tom', 'Cruise', 'Gerald'], key=index.get))
这将产生:

['Gerald', 'Tom', 'Cruise']

所以你有一个列表
[b,c,a]
和一个列表
[a,b,c]
,你想要
[a,b,c]
?对我来说不是问题,你已经得到了你想要的。也许你解释得不对。同时,展示你迄今为止为实现目标所做的努力。马可·博内利,我认为第二个列表只是一种“字母表”。第一个列表可以是['a','b','c',第二个['z','y','x',...c','b','a',输出['c','b','a']@NyuB是的,我想是的,但解释得不太清楚。还有,
['Tom Cruise-Gerald']
输入错误或您真的有一个元素列表?我有一个元素列表,这是一个包含多个单词的字符串。这是否意味着我必须添加一个步骤,将字符串['Tom Cruise Gerald']拆分为列表['Tom'、'Cruise'、'Gerald'。看起来不是很直观soln@min2bro嗯,你的“名单”“目前实际上不是一个
列表
。您只是在列表中放入了一个字符串。请使用
“Tom Cruise Gerald”.split()
,而不是
[“Tom Cruise Gerald”]
。请注意,
list.index
方法需要O(n)的平均时间复杂度,因此本质上是低效的。
reference = ['Gerald', 'Tom', 'Cruise']
index = {k: i for i, k in enumerate(reference)}
print(sorted(['Tom', 'Cruise', 'Gerald'], key=index.get))
['Gerald', 'Tom', 'Cruise']