按字母数字元素中的数值排序列表
下面这段话是在问,如何只根据列表中每个元素的数字部分来对这个列表进行排序,以达到预期的结果。
l = ["V1", "P18", "V3", "A2", "V4"]
预期的输出结果是:
["V1", "A2", "V3", "V4", "P18"]
预期的输出结果是:
["V1", "A2", "V3", "V4", "P18"]
2 个回答
1
试试这个:
l = ["V1", "P18", "V3", "A2", "V4"]
l.sort(key=lambda k: int(k[1:]))
print(l)
输出结果是:
['V1', 'A2', 'V3', 'V4', 'P18']
补充说明:如果开头还有更多字符,可以使用 re
这个方法:
import re
l = ["V1", "P18", "V3", "A2", "V4"]
l.sort(key=lambda k: int(re.search(r"\d+$", k).group(0)))
print(l)
1
更通用的代码
import re
def sort_by_numeric_part(element):
match = re.search(r'\d+', element)
if match:
return int(match.group())
else:
return float('inf')
l = ["V1", "P18", "V3", "A2", "V4"]
l = sorted(l, key=sort_by_numeric_part)