Python 通过选中列表的一部分来替换列表中的项
我有这样一份清单:Python 通过选中列表的一部分来替换列表中的项,python,Python,我有这样一份清单: [item1(130.35),item2(140.10),item2(140.25),item2(130.05)] 我想通过检查每个项目编号的前几位,将其替换为与其他列表不同的项目。 例如,所有130个replaceditem1、所有140个replaceditem2: [replaceditem1,replaceditem2,replaceditem2,replaceditem1] 其想法是: 定义一个正则表达式来提取所需的数字-item\d+\(\d+\。\d+\)
[item1(130.35),item2(140.10),item2(140.25),item2(130.05)]
我想通过检查每个项目编号的前几位,将其替换为与其他列表不同的项目。
例如,所有130个replaceditem1、所有140个replaceditem2:
[replaceditem1,replaceditem2,replaceditem2,replaceditem1]
其想法是:
- 定义一个正则表达式来提取所需的数字-
适用于这组输入item\d+\(\d+\。\d+\)
- 定义替换字典(有助于保持替换逻辑的干净,如果需要扩展解决方案)
- 迭代列表中的所有项目,提取数字并查看是否有数字的替换项-如果没有,我们将只添加未更改的项目
让我们看一下正则表达式:
匹配一个或多个连续数字\d+
和\(
将匹配文本的开括号和右括号-需要转义,因为它们有特殊的含义\)
将匹配文字点\。
是捕获一个或多个连续数字的捕获组(\d+)
[replaceditem1如果i==130 else replaceditem2如果i==140 else i for i in lst]
?创建新的,空列表并使用for循环从旧列表中获取每个元素,检查它是否有130
或140
,然后添加到新列表replacedetim1
或replacedetim2
实际列表是什么样的?item1(130.35)
是对item1()
的调用,还是像“item1(130.35)”
那样的字符串?如果item1(130.35)
是函数调用而不是字符串,那该怎么办?显然OP刚刚选择了你的答案,所以我上面的评论与此无关+1@leaf是的,我假设OP将这些项目作为字符串,看起来这个假设是正确的。谢谢
>>> 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']