根据字符串长度排序Python列表

163 投票
8 回答
168693 浏览
提问于 2025-04-15 21:18

我想根据字符串的长度来对一组字符串进行排序。我试着用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))

撰写回答