在Python中对字符串列表进行排序并将数字放在字母后面

7

我有一组字符串需要排序。

默认情况下,字母的值比数字(或字符串数字)大,因此会排在排序列表的末尾。

>>> 'a' > '1'
True
>>> 'a' > 1
True

我希望能够将以数字开头的所有字符串放在列表底部。

例如:

未排序的列表:

['big', 'apple', '42nd street', '25th of May', 'subway']

Python默认的排序方式:

['25th of May', '42nd street', 'apple', 'big', 'subway']

请求的排序方式:

['apple', 'big', 'subway', '25th of May', '42nd street']
1个回答

14
>>> a = ['big', 'apple', '42nd street', '25th of May', 'subway']
>>> sorted(a, key=lambda x: (x[0].isdigit(), x))
['apple', 'big', 'subway', '25th of May', '42nd street']

Python的排序函数可以使用可选的key参数,允许您指定在排序之前应用的函数。元组按其第一个元素排序,然后是第二个,依此类推。

您可以在这里阅读更多关于排序的内容。


5
这正是原帖所要求的。值得指出的是,这将无法对字符串数字进行自然排序,即'2'将被列在'11'之后。 - Lukas Graf
如果您的列表包含整数,请使用 str()x 包装起来:sorted(a, key=lambda x: (str(x)[0].isdigit(), str(x)) - djoll
一个方便的提示,如果你只想要字母在前面(而像'(&$#'等字符在后面),你可以使用key=lambda x: (not x[0].isalpha(), x)) - danodonovan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接