根据字符串的长度对Python列表进行排序
问题内容:
我想根据字符串长度对字符串列表进行排序。我尝试使用sort,如下所示,但它似乎没有给我正确的结果。
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']
有什么问题吗?
问题答案:
将传递lambda
给时sort
,您需要返回一个整数,而不是布尔值。因此,您的代码应改为:
xs.sort(lambda x,y: cmp(len(x), len(y)))
请注意,cmp是一个内置函数,cmp(x, y)
如果x
小于则返回-1 y
,x
等于则返回0 y
,x
大于则返回1 y
。
当然,您可以改为使用key
参数:
xs.sort(key=lambda s: len(s))
这告诉该sort
方法根据键函数返回的值进行排序。
编辑:感谢下面的balpha和Ruslan指出,您可以len
直接将其作为关键参数传递给函数,从而消除了对a的需要lambda
:
xs.sort(key=len)
正如Ruslan在下面指出的那样,您还可以使用内置的排序函数而不是list.sort
方法,该方法创建一个新列表,而不是就地对现有列表进行排序:
print(sorted(xs, key=len))