我有一个清单如下:
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])))
看起来您想按 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]))