使用更新的数字顺序更改列表元素

Change list elements with updated numerical order

我有一个列表如下:

L1 = ['asd', 'pqr', 'Mn2', 'Mn3', 'xyz']
L2 = ['asd', 'pqr', 'Mn7', 'Mn8', 'Mn9', 'xyz']

我正在尝试获取以下内容:

L1 = ['asd', 'pqr', 'Mn1', 'Mn2', 'xyz']
L2 = ['asd', 'pqr', 'Mn1', 'Mn2', 'Mn3', 'xyz']

即每次列表中出现 Mn1, Mn2, ... 系列时,我都需要更改它们以更新它们的年表。在L2中,Mn7, Mn8, Mn9更新为Mn1, Mn2, Mn3

Mn 系列可以是任意数字,即 Mn11, Mn12, Mn13, Mn14 等,但无论何时发生,它们都是按数字顺序排列的

我不知道该如何处理。

您可以使用正则表达式来替换数字。例如:

import re
from itertools import count


L1 = ["asd", "pqr", "Mn2", "Mn3", "xyz"]
L2 = ["asd", "pqr", "Mn7", "Mn8", "Mn9", "xyz"]


def change(lst):
    c, pat = count(1), re.compile(r"Mn(\d+)")
    return [pat.sub(lambda x: f"Mn{next(c)}", v) for v in lst]


L1 = change(L1)
L2 = change(L2)

print(L1)
print(L2)

打印:

['asd', 'pqr', 'Mn1', 'Mn2', 'xyz']
['asd', 'pqr', 'Mn1', 'Mn2', 'Mn3', 'xyz']