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中的第一个元素。。。