Ant*_*mud 4 python sorting tuples
嗨:我正在尝试以自定义方式对元组列表进行排序:
例如:
lt = [(2,4), (4,5), (5,2)]
Run Code Online (Sandbox Code Playgroud)
必须排序:
lt = [(5,2), (2,4), (4,5)]
Run Code Online (Sandbox Code Playgroud)
规则:
*如果[1] == b [0]
*元组大于b元组,如果[0] == b [1],则b元组大于元组
我已经实现了这样的cmp函数:
def tcmp(a, b):
if a[1] == b[0]:
return -1
elif a[0] == b[1]:
return 1
else:
return 0
Run Code Online (Sandbox Code Playgroud)
但排序列表:
lt.sort(tcmp)
Run Code Online (Sandbox Code Playgroud)
给我看看:
lt = [(2, 4), (4, 5), (5, 2)]
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
met*_*fox 11
听起来很多,你试图解决谷歌的Python类问题之一,即根据最后一个元素按顺序对元组列表进行排序.
我是怎么做到的:
def sort_last(tuples):
def last_value_tuple(t):
return t[-1]
return sorted(tuples, key=last_value_tuple)
Run Code Online (Sandbox Code Playgroud)
编辑:我没有阅读整个事情,我认为它是基于元组的最后一个元素.好吧,我还是要留在这里因为它对任何人都有用.
小智 6
您也可以使用lambda编写代码
def sort(tuples):
return sorted (tuples,key=lambda last : last[-1])
Run Code Online (Sandbox Code Playgroud)
所以 sort([(1, 3), (3, 2), (2, 1)]) 将产生 [(2, 1), (3, 2), (1, 3)]
我不确定您的比较函数在数学意义上(即传递性)是否有效。给定a, b, c一个比较函数,表示a > b和b > c暗示a > c。排序过程依赖于这个属性。
更不用说根据您的规则, fora = [1, 2]和b = [2, 1]您都具有a[1] == b[0]and a[0] == b[1],这意味着a 既大于又小于 b。
| 归档时间: |
|
| 查看次数: |
15086 次 |
| 最近记录: |