pythonlamda函数根据与前一个元组的关系对元组列表进行排序

pythonlamda函数根据与前一个元组的关系对元组列表进行排序,python,list,sorting,tuples,Python,List,Sorting,Tuples,是否可以使用sorted(list,lambda x:…)对元组列表进行排序,以便下一个元组的第一个值等于上一个元组的第二个值 list_of_tuples = [("JFK", "DEN"), ("LAX", "ORD"), ("DEN", "SFO"), ("LAS", "LAX"), ("ORD", "

是否可以使用
sorted(list,lambda x:…)
对元组列表进行排序,以便下一个元组的第一个值等于上一个元组的第二个值

list_of_tuples = [("JFK", "DEN"), ("LAX", "ORD"), ("DEN", "SFO"), ("LAS", "LAX"), ("ORD", "ATL"), ("ATL", "JFK"), ("SFO", "LAS")]
Desired_output = [('JFK', 'DEN'), ('DEN', 'SFO'), ('SFO', 'LAS'), ('LAS', 'LAX'), ('LAX', 'ORD'), ('ORD', 'ATL'), ('ATL', 'JFK')]

我知道如何按元组中的任一值进行排序(
已排序(元组列表,key=lambda x:x[0])
),但使用lambda排序并以某种方式引用列表中以前的值的最佳方法是什么?

使用
已排序()
是不可能的。但您可以使用for循环来解决它

d = dict(list_of_tuples)
res = [list_of_tuples[0]]
prev = res[0]

for idx in range(len(list_of_tuples) - 1):
    prev = (prev[1], d[prev[1]])
    res.append(prev)
print(res)
输出:

[('JFK', 'DEN'), ('DEN', 'SFO'), ('SFO', 'LAS'), ('LAS', 'LAX'), ('LAX', 'ORD'), ('ORD', 'ATL'), ('ATL', 'JFK')]

使用
sorted()
无法执行此操作。您要查找的是图中的哈密顿路径

图中的顶点是元组,如果元组的最后一个值与另一个元组的第一个值匹配,则有一条从一个元组到另一个元组的定向边

然而,如果下一个元组总是只有一个可能的候选,并且您知道可以从列表中的第一个元素开始,那么问题就简单多了,您不需要任何复杂的哈密顿路径算法

首先,将列表中的元素放入一个高效的数据结构中,以便轻松搜索下一个元组。您可以使用python dict。然后,逐个添加元素

元组列表=[(“JFK”、“DEN”)、(“LAX”、“ORD”)、(“DEN”、“SFO”)、(“LAS”、“LAX”)、(“ORD”、“ATL”)、(“ATL”、“JFK”)、(“SFO”、“LAS”)] dict_first={} 对于\u元组列表\u中的对: dict_first[对[0]]=对 结果=[元组列表[0]] 键=元组列表[0][1] 结果=[] 在输入dict_first和len(result) 输出:

[('JFK', 'DEN'), ('DEN', 'SFO'), ('SFO', 'LAS'), ('LAS', 'LAX'), ('LAX', 'ORD'), ('ORD', 'ATL'), ('ATL', 'JFK')]

试试这个代码

list_of_tuples = [("JFK", "DEN"), ("LAX", "ORD"), ("DEN", "SFO"),
                  ("LAS", "LAX"), ("ORD", "ATL"), ("ATL", "JFK"),
                  ("SFO", "LAS")]
Desired_output=[list_of_tuples[0]]
for i in range (len(list_of_tuples)):
    for j in  list_of_tuples:
        if Desired_output[i][1]==j[0]:
            Desired_output.append(j)
print(Desired_output)

list\u of tuples=((1,2)、(3,1))
回溯(最近一次调用最后一次):KeyError:2
查看后文中的输入每个tuples的第二个值是另一个tupleooks中的第一个元素。。。