如何按字典顺序对字母数字字符串列表进行排序
How to sort a list of alphanumeric strings in lexicographic order
我有一个包含字母数字值的字符串列表,我想使用中间值作为参数对其进行排序。
例如,我有以下列表:
test = ["ykc 82 01" , "ao first qx" , "teste teste teste" , "a1 03 02" , "ga eai oie"]
我想对它进行排序,但使用第二个值作为参数,例如在这种情况下,所需的输出应该是:
["ga eai oie" , "ao first qx" , "teste teste teste" , "a1 03 02" , "ykc 82 01"]
第一个元素是中间有“eai”的字符串,因为它以字母“e”开头,第二个元素是中间有“first”的字符串,因为它以字母“f”开头,并且依此类推,最后的元素是包含数值的元素,顺序不限。
我尝试使用带键的排序功能进行排序,如下所示:
test.sort(key = lambda x: (x.split()[1]))
但它 returns 首先是包含数值的元素,然后是具有数字值的元素:
['a1 03 02', 'ykc 82 01', 'aa eai oie', 'eo first qx', 'teste teste teste']
你需要传入稍微复杂一点的key
函数:
test.sort(key=lambda x: chr(123) if x.split()[1].isnumeric() else x)
这输出:
['ao first qx', 'ga eai oie', 'teste teste teste', 'ykc 82 01', 'a1 03 02']
解释:
任何字母字符的最高 ASCII 值是 122。使用 chr(123)
给我们一个字符,其 ASCII 值高于所有字母字符,这意味着完全是数字的字符串将放在最后。
您可以创建一个自定义排序函数,该函数 returns 一个二元组,将字母值放在前面,数值放在最后:
test = ["ykc 82 01" , "ao first qx" , "teste teste teste" , "a1 03 02" , "ga eai oie"]
def sort_func(value):
_, mid, _ = value.split()
return mid.isnumeric(), mid
print(sorted(test, key=sort_func))
输出:
['ga eai oie', 'ao first qx', 'teste teste teste', 'a1 03 02', 'ykc 82 01']
我有一个包含字母数字值的字符串列表,我想使用中间值作为参数对其进行排序。
例如,我有以下列表:
test = ["ykc 82 01" , "ao first qx" , "teste teste teste" , "a1 03 02" , "ga eai oie"]
我想对它进行排序,但使用第二个值作为参数,例如在这种情况下,所需的输出应该是:
["ga eai oie" , "ao first qx" , "teste teste teste" , "a1 03 02" , "ykc 82 01"]
第一个元素是中间有“eai”的字符串,因为它以字母“e”开头,第二个元素是中间有“first”的字符串,因为它以字母“f”开头,并且依此类推,最后的元素是包含数值的元素,顺序不限。
我尝试使用带键的排序功能进行排序,如下所示:
test.sort(key = lambda x: (x.split()[1]))
但它 returns 首先是包含数值的元素,然后是具有数字值的元素:
['a1 03 02', 'ykc 82 01', 'aa eai oie', 'eo first qx', 'teste teste teste']
你需要传入稍微复杂一点的key
函数:
test.sort(key=lambda x: chr(123) if x.split()[1].isnumeric() else x)
这输出:
['ao first qx', 'ga eai oie', 'teste teste teste', 'ykc 82 01', 'a1 03 02']
解释:
任何字母字符的最高 ASCII 值是 122。使用 chr(123)
给我们一个字符,其 ASCII 值高于所有字母字符,这意味着完全是数字的字符串将放在最后。
您可以创建一个自定义排序函数,该函数 returns 一个二元组,将字母值放在前面,数值放在最后:
test = ["ykc 82 01" , "ao first qx" , "teste teste teste" , "a1 03 02" , "ga eai oie"]
def sort_func(value):
_, mid, _ = value.split()
return mid.isnumeric(), mid
print(sorted(test, key=sort_func))
输出:
['ga eai oie', 'ao first qx', 'teste teste teste', 'a1 03 02', 'ykc 82 01']