通过检查i的部分替换列表中的项

2024-06-16 13:31:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个清单:

[item1(130.35),item2(140.10),item2(140.25),item2(130.05)]

我想通过检查每个项目编号的前几位,将其替换为与另一个列表不同的项目。 例如,所有130个replaceditem1,所有140个replaceditem2:

[replaceditem1,replaceditem2,replaceditem2,replaceditem1]

Tags: 项目列表item1项目编号item2replaceditem2replaceditem1
1条回答
网友
1楼 · 发布于 2024-06-16 13:31:10

其目的是:

  • 定义一个正则表达式来提取所需的数字-item\d+\((\d+)\.\d+\)将适用于这组输入
  • 定义替换字典(有助于保持替换逻辑的干净性,如果需要扩展解决方案)
  • 迭代列表中的所有项目,提取数字,然后查看是否有数字的替换项-如果没有,我们将只添加不变的项目

演示:

>>> l = ["item1(130.35)", "item2(140.10)", "item2(140.25)", "item2(130.05)"]

>>> import re

>>> pattern = re.compile(r"item\d+\((\d+)\.\d+\)")

>>> replacements = {
...     '130': 'replaceditem1',
...     '140': 'replaceditem2'
... }

>>> result = []

>>> for item in l:
...     match = pattern.match(item)
...     if match:
...         result.append(replacements.get(match.group(1), item))
...     else:
...         result.append(item)

>>> result
['replaceditem1', 'replaceditem2', 'replaceditem2', 'replaceditem1']

让我们看一下正则表达式:

  • \d+匹配一个或多个连续数字
  • \(\)将匹配字面上的开括号和闭括号-需要转义,因为它们有特殊的含义
  • \.将匹配文字点
  • (\d+)是捕获一个或多个连续数字的捕获组

相关问题 更多 >