我想根据字符串长度对字符串列表进行排序。我尝试使用排序,如下所示,但它似乎没有给我正确的结果。
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']
可能出了什么问题?
发布于 2010-04-07 02:47:44
将lambda
传递给sort
时,需要返回整数,而不是布尔值。因此,您的代码应该改为如下所示:
xs.sort(lambda x,y: cmp(len(x), len(y)))
请注意,cmp是一个内置函数,如果x
小于y
,则cmp(x, y)
返回-1;如果x
等于y
,则返回0;如果x
大于y
,则返回1。
当然,您也可以使用key
参数:
xs.sort(key=lambda s: len(s))
这告诉sort
方法根据键函数返回的内容进行排序。
编辑:感谢下面的balpha和Ruslan指出,您可以直接将len
作为关键参数传递给函数,从而消除了对lambda
的需要
xs.sort(key=len)
正如Ruslan在下面指出的,您还可以使用内置的sorted函数而不是list.sort
方法,后者会创建一个新的列表,而不是对现有列表进行就地排序:
print(sorted(xs, key=len))
发布于 2010-04-07 03:03:29
与Eli的答案相同-只是使用较短的表单,因为您可以跳过此处的lambda
部分。
创建新列表:
>>> xs = ['dddd','a','bb','ccc']
>>> sorted(xs, key=len)
['a', 'bb', 'ccc', 'dddd']
就地排序:
>>> xs.sort(key=len)
>>> xs
['a', 'bb', 'ccc', 'dddd']
发布于 2015-08-04 11:46:19
编写一个函数lensort,根据长度对字符串列表进行排序。
def lensort(a):
n = len(a)
for i in range(n):
for j in range(i+1,n):
if len(a[i]) > len(a[j]):
temp = a[i]
a[i] = a[j]
a[j] = temp
return a
print lensort(["hello","bye","good"])
https://stackoverflow.com/questions/2587402
复制相似问题