pro*_*eek 95 python sorting list
我想根据字符串长度对字符串列表进行排序.我尝试使用如下排序,但它似乎没有给我正确的结果.
xs = ['dddd','a','bb','ccc']
print xs
xs.sort(lambda x,y: len(x) < len(y))
print xs
['dddd', 'a', 'bb', 'ccc']
['dddd', 'a', 'bb', 'ccc']
Run Code Online (Sandbox Code Playgroud)
可能有什么问题?
Eli*_*ght 177
传递给lambda
to时sort
,需要返回一个整数,而不是布尔值.所以你的代码应该如下所示:
xs.sort(lambda x,y: cmp(len(x), len(y)))
Run Code Online (Sandbox Code Playgroud)
注意,CMP是一个内置函数,使得cmp(x, y)
返回-1,如果x
小于y
,0,如果x
等于y
,和1,如果x
是大于y
.
当然,您可以改为使用key
参数:
xs.sort(key = lambda s: len(s))
Run Code Online (Sandbox Code Playgroud)
这告诉sort
方法根据键函数返回的顺序进行排序.
编辑:感谢下面的balpha和Ruslan指出你可以len
直接作为关键参数传递给函数,因此不需要lambda
:
xs.sort(key = len)
Run Code Online (Sandbox Code Playgroud)
正如Ruslan在下面指出的那样,你也可以使用内置的有序函数而不是list.sort
方法,它创建一个新的列表,而不是就地对现有的列表进行排序:
print sorted(xs, key=len)
Run Code Online (Sandbox Code Playgroud)
Rus*_*vak 83
与Eli的答案相同 - 只是使用较短的形式,因为你可以lambda
在这里跳过一个部分.
创建新列表:
>>> xs = ['dddd','a','bb','ccc']
>>> sorted(xs, key=len)
['a', 'bb', 'ccc', 'dddd']
Run Code Online (Sandbox Code Playgroud)
就地排序:
>>> xs.sort(key=len)
>>> xs
['a', 'bb', 'ccc', 'dddd']
Run Code Online (Sandbox Code Playgroud)