排序列表使字母在任何位置的数字之前

yat*_*atu 4 python sorting list

说我有以下列表:

l = ['erget', 'a1', 'm1', 'aa', 'ae', 'mea', 'erge4', 'erge7', 'm2', 'me2', 'mei']
Run Code Online (Sandbox Code Playgroud)

当使用sorted()包含数字的字符串列表时,数字位于字母之前,因此在这种情况下它将产生:

sorted(l)
['a1', 'aa', 'ae', 'erge4', 'erge7', 'erget', 'm1', 'm2', 'me2', 'mea', 'mei']
Run Code Online (Sandbox Code Playgroud)

我已经看到了一些像这样的答案如何使字母出现在数字之前,但仅限于一个数字或字母.是否可以这样做,也是使用一些keysorted()当数字可以在字符串中的任何地方?所以预期产量:

['aa', 'ae', 'a1', 'erget', 'erge4', 'erge7', 'mea', 'mei', 'me2', 'm1', 'm2']
Run Code Online (Sandbox Code Playgroud)

jpp*_*jpp 6

您可以使用sorted元组列表作为自定义键:

L = ['erget', 'a1', 'm1', 'aa', 'ae', 'mea', 'erge4', 'erge7', 'm2', 'me2', 'mei']
res = sorted(L, key=lambda x: [(i.isdigit(), i) for i in x])

# ['aa', 'ae', 'a1', 'erget', 'erge4', 'erge7', 'mea', 'mei', 'me2', 'm1', 'm2']
Run Code Online (Sandbox Code Playgroud)