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

时间:2016-12-31 01:11:35

标签: python

我有一个这样的清单:

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

我想通过检查其编号的第一个数字来替换每个项目与其他列表不同的内容。 例如,所有130个被替换为m1,所有140个被替换为m2:

[replaceditem1,replaceditem2,replaceditem2,replaceditem1]

1 个答案:

答案 0 :(得分:2)

这个想法是:

  • 定义正则表达式以提取所需的数字 - 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+)捕获组,可捕获一个或多个连续数字