Python中按字母顺序排序列表的最快方法是什么?

4

我有一个简单的列表,其中的数字是字符串:

simple_list = ['1','2','3','4','5','K','P']

我想首先按字母顺序排序,然后按数字顺序排序。

目前我正在做以下操作:

# Probably a faster way to handle this
alpha_list = [x for x in simple_list if not x.isnumeric()]
grade_list = [x for x in simple_list if x.isnumeric()]
# Put the alpha grades at the beginning of the grade_list
if alpha_list:
    grade_list = sorted(alpha_list) + sorted(grade_list)

我相信有更快的方法处理这个问题,只是我似乎找不到它。
我目前得到的结果是正确的['K','P','1','2','3','4','5'] 我只想知道是否有一种比多个列表推导更有效的压缩方法。

你现有的解决方案有什么问题吗?处理时间太长了吗? - David Culbreth
类似于“sorted(simple_list, key=lambda L: (L.isnumeric(), L))”这样的内容,我相信如果我能找到某个答案的话,它会得到解释... - Jon Clements
可以进行一些更改,例如使用单个循环来过滤值。然后可以使用.sort()方法,它会就地排序,而不是使用sorted方法创建一个新列表。 - mad_
是的,处理需要一点时间 - 我只是想确保我尽可能高效。@JonClements 我会尝试那个。我一直在搜索,但几乎没有结果。 - Hanny
创建一个字典,将字母数字字符与它们的排序顺序进行映射,并使用 sorted(arr, key=lambda x: mapping[x])。本质上,您正在重新创建基于字符串排序的ASCII表。接下来的步骤是创建一个哈希函数,它记住这个新的排序顺序,这将使您能够操作更长的字符串。 - I'll Eat My Hat
1个回答

6
您可以使用一个关键函数来对列表进行排序,该函数返回一个元组,其中包括str.isdigit()测试和字符串。如果字符串被发现是数字,则将其转换为整数:
sorted(simple_list, key=lambda c: (c.isdigit(), int(c) if c.isdigit() else c))

这将返回:
['K', 'P', '1', '2', '3', '4', '5']

5
请尝试使用以下内容作为输入:simple_list = ['1','22','3','4','5','K','P'] - mad_

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