根据字符串长度排序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']
可能哪里出了问题呢?
8 个回答
9
最简单的方法是:
list.sort(key = lambda x:len(x))
这段代码的意思是对一个列表进行排序,排序的标准是列表中每个元素的长度。简单来说,就是把列表里的东西按长度从短到长排列。这里的“lambda x:len(x)”是一个小工具,用来告诉程序要根据每个元素的长度来排序。
118
和Eli的回答一样,只是用了一种更简短的写法,因为这里可以省略一个lambda
的部分。
创建新列表:
>>> xs = ['dddd','a','bb','ccc']
>>> sorted(xs, key=len)
['a', 'bb', 'ccc', 'dddd']
就地排序:
>>> xs.sort(key=len)
>>> xs
['a', 'bb', 'ccc', 'dddd']
266
当你把一个 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
方法,这样会创建一个新列表,而不是在原来的列表上直接排序:
print(sorted(xs, key=len))