Python:对由字母和数字组成的字符串列表进行排序

sin*_*ium 4 python sorting list

我有一个列表,其元素由字母和数字组成,如下所示:

['H1', 'H100', 'H10', 'H3', 'H2', 'H6', 'H11', 'H50', 'H5', 'H99', 'H8'] 
Run Code Online (Sandbox Code Playgroud)

我想对其进行排序,所以我使用了函数 sort,但我得到了输出:

>>> a = ['H1', 'H100', 'H10', 'H3', 'H2', 'H6', 'H11', 'H50', 'H5', 'H99', 'H8']
>>> print sorted(a)
['H1', 'H10', 'H100', 'H11', 'H2', 'H3', 'H5', 'H50', 'H6', 'H8', 'H99']
Run Code Online (Sandbox Code Playgroud)

但是,我希望输出是:

['H1', 'H2', 'H3', 'H5', 'H6', 'H8', 'H10', 'H11', 'H50', 'H99', 'H100']
Run Code Online (Sandbox Code Playgroud)

有谁知道如何做到这一点吗?谢谢

Rak*_*esh 8

l = ['H1', 'H100', 'H10', 'H3', 'H2', 'H6', 'H11', 'H50', 'H5', 'H99', 'H8']
print sorted(l, key=lambda x: int("".join([i for i in x if i.isdigit()])))
Run Code Online (Sandbox Code Playgroud)

输出:

['H1', 'H2', 'H3', 'H5', 'H6', 'H8', 'H10', 'H11', 'H50', 'H99', 'H100']
Run Code Online (Sandbox Code Playgroud)