2024-10-02 14:25:08 发布
网友
我试图用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)
输出
如何实现第二元素的递增顺序列表?谢谢。在
就像@Kasra说的,你不需要使用cmp参数,你可以只使用键,如果你想把第二个元素看作整数(数字),你可以用“”(假设只有,出现在里面)(空字符串)然后转换为int并使用,这样同样长度的数字也可以正确排序。在
cmp
,
示例-
>>> 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:
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将根据第二个元素词典对列表进行排序!在
sort
有关python sort函数的更多信息,请阅读https://docs.python.org/2/library/functions.html#sorted
就像@Kasra说的,你不需要使用
cmp
参数,你可以只使用键,如果你想把第二个元素看作整数(数字),你可以用“”(假设只有,
出现在里面)(空字符串)然后转换为int并使用,这样同样长度的数字也可以正确排序。在示例-
从documentationfor
cmp
参数-如上所述,如果两者都相等,cmp函数需要返回0;如果第一个参数大于,则返回正数;如果第一个参数小于第二个参数,则返回负数。在
但是在您的例子中,您返回的是一个布尔值,导致了这个问题。在
您不需要
cmp
这里只需使用key
:您需要知道
sort
函数将根据key
对列表元素进行排序,这里的键不考虑元素的长度。您只需根据第二个元素进行排序,sort
将根据第二个元素词典对列表进行排序!在有关python
sort
函数的更多信息,请阅读https://docs.python.org/2/library/functions.html#sorted相关问题 更多 >
编程相关推荐