如何解决Python lamda函数根据与先前元组的关系对元组列表进行排序
是否可以使用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')]
我知道如何按元组(sorted(list_of_tuples,key = lambda x: x[0])
)中的任何一个值进行排序,但是使用lambda进行排序并以某种方式引用列表中的先前值的最佳方法是什么?
解决方法
sorted()
无法实现。但是您可以使用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字典。然后,一一添加元素。
list_of_tuples = [("JFK","DEN"),("LAX","ORD"),("DEN","SFO"),("LAS","LAX"),("ORD","ATL"),("ATL","JFK"),("SFO","LAS")]
dict_first = {}
for pair in list_of_tuples:
dict_first[pair[0]] = pair
result = [list_of_tuples[0]]
key = list_of_tuples[0][-1]
result = []
while key in dict_first and len(result) < len(list_of_tuples):
result.append(dict_first[key])
key = result[-1][-1]
print(result)
输出:
[('JFK','JFK')]
,
尝试此代码,
list_of_tuples = [("JFK","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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。