按字母数字元素中的数值排序列表

0 投票
2 回答
41 浏览
提问于 2025-04-13 17:20

下面这段话是在问,如何只根据列表中每个元素的数字部分来对这个列表进行排序,以达到预期的结果。

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)

撰写回答