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

4
我有一个列表,其元素由字母和数字组成,如下所示:
['H1', 'H100', 'H10', 'H3', 'H2', 'H6', 'H11', 'H50', 'H5', 'H99', 'H8'] 

我想对其进行排序,因此我使用了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']

然而,我希望输出结果是:
['H1', 'H2', 'H3', 'H5', 'H6', 'H8', 'H10', 'H11', 'H50', 'H99', 'H100']

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

1个回答

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()])))

输出:

['H1', 'H2', 'H3', 'H5', 'H6', 'H8', 'H10', 'H11', 'H50', 'H99', 'H100']

你好 @Rakesh,能否请您解释一下这段代码 int("".join([i for i in x if i.isdigit()])) 的含义?为什么 isdigit 不会返回 false 呢?我认为它应该像这样工作:isdigit('H1')isdigit('H100')... - PIG
1
@PIG 这段代码片段获取字符串中的数字部分。例如,'H100' 变成了 100。for i in x if i.isdigit() 逐个字母检查它是否是数字。如果是数字,则将其添加到列表中。当我们执行 "".join 时,我们将列表的所有元素即字符串的数字部分与空分隔符 "" 组合在一起。 - Sergey Ivanov
@SergeyIvanov 谢谢。 - Rakesh
@SergeyIvanov 代码的哪一部分是将数字中的字符部分删除。例如,期望的结果应该是'H100',但是代码的哪一部分会将其输出为'100'。我只是不理解这一部分。 - PIG
@Rakesh 我的问题是代码中哪一部分将 'H''101' 分开了。请解释一下。 - PIG
显示剩余3条评论

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