Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过选中列表的一部分来替换列表中的项_Python - Fatal编程技术网

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']