python - 按长度排序的列表,但在一个步骤中按字母顺序排列的长度相同

标签 python python-2.6

我的 Python 字符串列表类似于 x 但足够长:

x = ['aaa','ab','aa','c','a','b','ba']      

我想将此列表排序为:['a', 'b', 'c', 'aa', 'ab', 'ba', 'aaa'] 我做到了如下两个步骤:

>>> x.sort()   
>>> x.sort(key=len)      
>>> x
['a', 'b', 'c', 'aa', 'ab', 'ba', 'aaa']   

但我需要一步到位:我还使用 lambda 函数 (taken help) 绑定(bind):

>>> x.sort(key=lambda item: (item, len(item)))
>>> x
['a', 'aa', 'aaa', 'ab', 'b', 'ba', 'c']  

但不是我想要的:

是否可以一步到位?让我开心。

我的 python :

~$ python --version  
Python 2.6.6

最佳答案

你弄错了元组的顺序。当 Python 对元组进行排序时,第一个值是 main 排序,第二个是子排序,等等... - 您的代码假定相反的顺序。

您想按长度排序,然后按字母顺序排序:

>>> x.sort(key=lambda item: (len(item), item))
>>> x
['a', 'b', 'c', 'aa', 'ab', 'ba', 'aaa']

编辑:正如 DSM 在评论中指出的那样,Python 将字母排序为大写字母,然后是小写字母。如果不需要此行为,请参阅 this answer .

关于python - 按长度排序的列表,但在一个步骤中按字母顺序排列的长度相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14103620/

相关文章:

python - 如何使用 iloc 将条件语句应用于 Pandas Dataframe 上的多个列?

python - 如何获得 DataFrame 中列值的组合结果?

python - 类型错误 : 'dict' object does not support indexing

user-interface - 取消选择单选按钮

python - 使用 re.split 拆分字符串时的额外空元素

python - 我如何在 python 中将一个很长的字符串拆分成一个较短的字符串列表

python - 如何使用文件指针在特定行或单词之后编辑文本文档

python - 是否可以在此代码逻辑上使用应用函数或向量化?

python - 从预签名 url curl S3 对象时访问被拒绝错误

python - 使 Python 2.7 代码与 Python 2.6 一起运行