首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >根据字符串长度对Python列表进行排序

根据字符串长度对Python列表进行排序
EN

Stack Overflow用户
提问于 2010-04-07 02:45:00
回答 5查看 137.9K关注 0票数 129

我想根据字符串长度对字符串列表进行排序。我尝试使用排序,如下所示,但它似乎没有给我正确的结果。

代码语言:javascript
复制
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']

可能出了什么问题?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-04-07 02:47:44

lambda传递给sort时,需要返回整数,而不是布尔值。因此,您的代码应该改为如下所示:

代码语言:javascript
复制
xs.sort(lambda x,y: cmp(len(x), len(y)))

请注意,cmp是一个内置函数,如果x小于y,则cmp(x, y)返回-1;如果x等于y,则返回0;如果x大于y,则返回1。

当然,您也可以使用key参数:

代码语言:javascript
复制
xs.sort(key=lambda s: len(s))

这告诉sort方法根据键函数返回的内容进行排序。

编辑:感谢下面的balpha和Ruslan指出,您可以直接将len作为关键参数传递给函数,从而消除了对lambda的需要

代码语言:javascript
复制
xs.sort(key=len)

正如Ruslan在下面指出的,您还可以使用内置的sorted函数而不是list.sort方法,后者会创建一个新的列表,而不是对现有列表进行就地排序:

代码语言:javascript
复制
print(sorted(xs, key=len))
票数 230
EN

Stack Overflow用户

发布于 2010-04-07 03:03:29

与Eli的答案相同-只是使用较短的表单,因为您可以跳过此处的lambda部分。

创建新列表:

代码语言:javascript
复制
>>> xs = ['dddd','a','bb','ccc']
>>> sorted(xs, key=len)
['a', 'bb', 'ccc', 'dddd']

就地排序:

代码语言:javascript
复制
>>> xs.sort(key=len)
>>> xs
['a', 'bb', 'ccc', 'dddd']
票数 95
EN

Stack Overflow用户

发布于 2015-08-04 11:46:19

编写一个函数lensort,根据长度对字符串列表进行排序。

代码语言:javascript
复制
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"])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2587402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档