我想根据字符串长度对字符串列表进行排序。尝试使用以下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)
返回-1如果x
小于y
,返回0如果x
等于y
,返回1如果x
大于y
。当然,你也可以使用key
参数:xs.sort(key=lambda s: len(s))
这将告诉sort
方法基于键函数返回的内容进行排序。
编辑:感谢下面的balpha和Ruslan指出,您可以直接将len
作为关键参数传递给函数,从而消除了使用lambda
的必要性:
xs.sort(key=len)
正如Ruslan在下面指出的,你也可以使用内置的sorted函数,而不是list.sort
方法。sorted函数会创建一个新的列表,而不是就地对现有列表进行排序:
print(sorted(xs, key=len))
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)
- Raz其中,lambda函数是按照列表中每个元素的长度进行排序。list.sort(key = lambda x:len(x))
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"])
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表达式的一行代码,如下所示,已经在之前回答过了。
lista = ['a', 'bb', 'ccc', 'dddd']
lista.sort(key = lambda x:len(x))
print(lista)
def swap_pos(lst):
for i in range(len(lst)):
for j in range(0, i):
if len(lst[j]) < len(lst[i]):
lst.insert(j, lst[i])
lst.pop(i + 1)
break
print(lst)
swap_pos(technology)
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
这个对我来说可行!
lambda
,只需使用key = len
。 - balphaxs.sort()
抛出 "TypeError: sort() takes no positional arguments"。应该使用xs.sort(key=lambda x: len(x))
。 - Hi-Angel