按字母数字顺序对列表进行排序

问题描述 投票:0回答:1

我有一个清单如下:

l1 = ['F2', 'G2', 'B2', 'A10', 'H2', 'A3', 'B11', 'E3', 'C12', 'G3',
      'B10', 'C1', 'D1', 'E1', 'D2', 'C3', 'A1']

如何将以上列表排序为:

l1 = ['A1', 'C1', 'D1', 'E1', 'B2', 'D2', 'F2', 'G2', 'H2', 'A3',
      'C3', 'E3', 'G3', 'A10', 'B10', 'B11', 'C12']

我尝试过的:

list(sorted(l1, key=lambda item: (item[0][1], item[0][1:0])))
python list sorting alphanumeric
1个回答
1
投票

看起来您想按 2 个条件排序:首先按字符串末尾的数字值排序,然后按起始字母排序。

您当前的代码无法运行,因为对于列表中的每个

item
,您尝试获取
item[0][1]
,这将首先获取第一个字符 (
item[0]
),然后获取索引
1
处的字符其中,这是超出范围的。
item[0][1:0]
也出现类似问题。

相反,您希望首先按字符串第一个字符后面的数字进行排序。您可以通过

item[1:]
获取 this 的字符串值,然后应用
int(item[1:])
将其转换为数字。然后,您的第二个标准只是第一个字符本身(对于您的列表来说始终是一个字母),可以通过
item[0]

获得

因此,您的新密钥将是

(int(item[1:]), item[0])
,这意味着以下内容将为您提供所需的输出:

sorted(l1, key=lambda item: (int(item[1:]), item[0]))
© www.soinside.com 2019 - 2024. All rights reserved.