先按字母排序包含字母数字项的列表
Sort list with alphanumeric items by letter first
我有这样一个包含字母数字项目的列表:
['A08', 'A09', 'A02', 'A03', 'A06', 'A07', 'A04', 'A05', 'A15', 'A14', 'A17', 'A16', 'A11',
'B01', 'B03', 'B02', 'B05', 'B04', 'B07', 'B06', 'B09', 'B08', 'B16', 'B17', 'B14', 'B15',
'C05', 'C06', 'C07', 'C19', 'C13', 'C12', 'C11', 'C10', 'C17', 'C16', 'C15', 'C14', 'C22',
'D02', 'D01', 'D09', 'D08', 'D14', 'D10', 'D11', 'D12', 'D15', 'D16', 'D17', 'D13',
'E08', 'E09', 'E06', 'E07', 'E04', 'E05', 'E02', 'E03', 'E01', 'E11', 'E10', 'E13', 'E12', 'E15', 'E14', 'E17', 'E16',
'F05', 'F04', 'F07', 'F06', 'F01', 'F03', 'F02', 'F09', 'F08', 'F12', 'F13', 'F10', 'F11', 'F16', 'F17', 'F14', 'F15',
'G08', 'G09', 'G04', 'G05', 'G06', 'G07']
我正在尝试使用 sorted
方法按这样的顺序对其进行排序:
['A01', 'B01', 'C01',
'A02', 'B02', 'C02',
'A03', 'B03', 'C03']
但我得到的是:
['A01', 'A02', 'A03',
'B01', 'B02', 'B03',
'C01', 'C02', 'C03']
我尝试将几个 key
传递给 sorted
,但我不太明白。
我应该使用什么key
?或者我应该使用其他方法?
你需要的是对数字部分进行优先排序,所以只需创建一个关键函数来生成 tuple
,首先是数字部分,然后是字母部分,然后让自然的 tuple
顺序进行休息。
print(sorted(lst,key = lambda x : (x[1:],x[0])))
数字部分不需要转换为整数,只要有偶数个数字(零填充)
有了这样的输入:
lst = ['A01', 'A02', 'A03',
'B01', 'B02', 'B03',
'C01', 'C02', 'C03']
你得到:
['A01', 'B01', 'C01', 'A02', 'B02', 'C02', 'A03', 'B03', 'C03']
(如果你想保护你的列表免受空元素的影响,请执行 lambda x : (x[1:],x[0]) if x else tuple())
,尽管这违背了使用格式化元素排序列表的想法)
我有这样一个包含字母数字项目的列表:
['A08', 'A09', 'A02', 'A03', 'A06', 'A07', 'A04', 'A05', 'A15', 'A14', 'A17', 'A16', 'A11',
'B01', 'B03', 'B02', 'B05', 'B04', 'B07', 'B06', 'B09', 'B08', 'B16', 'B17', 'B14', 'B15',
'C05', 'C06', 'C07', 'C19', 'C13', 'C12', 'C11', 'C10', 'C17', 'C16', 'C15', 'C14', 'C22',
'D02', 'D01', 'D09', 'D08', 'D14', 'D10', 'D11', 'D12', 'D15', 'D16', 'D17', 'D13',
'E08', 'E09', 'E06', 'E07', 'E04', 'E05', 'E02', 'E03', 'E01', 'E11', 'E10', 'E13', 'E12', 'E15', 'E14', 'E17', 'E16',
'F05', 'F04', 'F07', 'F06', 'F01', 'F03', 'F02', 'F09', 'F08', 'F12', 'F13', 'F10', 'F11', 'F16', 'F17', 'F14', 'F15',
'G08', 'G09', 'G04', 'G05', 'G06', 'G07']
我正在尝试使用 sorted
方法按这样的顺序对其进行排序:
['A01', 'B01', 'C01',
'A02', 'B02', 'C02',
'A03', 'B03', 'C03']
但我得到的是:
['A01', 'A02', 'A03',
'B01', 'B02', 'B03',
'C01', 'C02', 'C03']
我尝试将几个 key
传递给 sorted
,但我不太明白。
我应该使用什么key
?或者我应该使用其他方法?
你需要的是对数字部分进行优先排序,所以只需创建一个关键函数来生成 tuple
,首先是数字部分,然后是字母部分,然后让自然的 tuple
顺序进行休息。
print(sorted(lst,key = lambda x : (x[1:],x[0])))
数字部分不需要转换为整数,只要有偶数个数字(零填充)
有了这样的输入:
lst = ['A01', 'A02', 'A03',
'B01', 'B02', 'B03',
'C01', 'C02', 'C03']
你得到:
['A01', 'B01', 'C01', 'A02', 'B02', 'C02', 'A03', 'B03', 'C03']
(如果你想保护你的列表免受空元素的影响,请执行 lambda x : (x[1:],x[0]) if x else tuple())
,尽管这违背了使用格式化元素排序列表的想法)