使用自定义比较函数python对列表进行排序

2024-10-02 14:25:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python对列表进行排序,但似乎不起作用。在

def get(l):
        return l[1]

def com(x,y):
        return len(x) < len(y)

x = [['jis','1,2334'],['hshshau','123'],['sjuaj','3214']]
x.sort(cmp=com,key=get)

输出

^{pr2}$

如何实现第二元素的递增顺序列表?谢谢。在


Tags: keycom列表getlenreturn排序def
2条回答

就像@Kasra说的,你不需要使用cmp参数,你可以只使用键,如果你想把第二个元素看作整数(数字),你可以用“”(假设只有,出现在里面)(空字符串)然后转换为int并使用,这样同样长度的数字也可以正确排序。在

示例-

>>> x = [['jis','1,2334'],['hshshau','123'],['sjuaj','3214'],['nbhd','1,841']]
>>> x.sort(key = lambda x: int(x[1].replace(',','')))
>>> x
[['hshshau', '123'], ['nbhd', '1,841'], ['sjuaj', '3214'], ['jis', '1,2334']]

documentationfor cmp参数-

cmp specifies a custom comparison function of two arguments (iterable elements) which should return a negative, zero or positive number

如上所述,如果两者都相等,cmp函数需要返回0;如果第一个参数大于,则返回正数;如果第一个参数小于第二个参数,则返回负数。在

但是在您的例子中,您返回的是一个布尔值,导致了这个问题。在

您不需要cmp这里只需使用key

>>> x = [['jis','1,2334'],['hshshau','123'],['sjuaj','3214']]
>>> 
>>> x.sort(key=lambda x:len(x[1]))
>>> x
[['hshshau', '123'], ['sjuaj', '3214'], ['jis', '1,2334']]
>>> 

您需要知道sort函数将根据key对列表元素进行排序,这里的键不考虑元素的长度。您只需根据第二个元素进行排序,sort将根据第二个元素词典对列表进行排序!在

有关python sort函数的更多信息,请阅读https://docs.python.org/2/library/functions.html#sorted

相关问题 更多 >