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
传递给lambdato时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)
| 归档时间: |
|
| 查看次数: |
107439 次 |
| 最近记录: |