Answers:
将传递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))
xs.sort()
抛出“类型错误:排序()不带任何位置参数”。相反,应该是xs.sort(key=lambda x: len(x))
与Eli的答案相同-只是使用较短的表格,因为您可以lambda
在此处跳过一部分。
创建新列表:
>>> xs = ['dddd','a','bb','ccc']
>>> sorted(xs, key=len)
['a', 'bb', 'ccc', 'dddd']
就地排序:
>>> xs.sort(key=len)
>>> xs
['a', 'bb', 'ccc', 'dddd']
xs.sort(key=len, reverse=True)
最简单的方法是:
list.sort(key = lambda x:len(x))
def lensort(list_1):
list_2=[];list_3=[]
for i in list_1:
list_2.append([i,len(i)])
list_2.sort(key = lambda x : x[1])
for i in list_2:
list_3.append(i[0])
return list_3
这对我有用!
我可以使用以下两种方法来实现
def lensort(x):
list1 = []
for i in x:
list1.append([len(i),i])
return sorted(list1)
lista = ['a', 'bb', 'ccc', 'dddd']
a=lensort(lista)
print([l[1] for l in a])
在使用Lambda的一个Liner中,如下所示,上面已经给出了答案。
lista = ['a', 'bb', 'ccc', 'dddd']
lista.sort(key = lambda x:len(x))
print(lista)
lambda
; 只需使用key = len