在 for 循环中操作字符串

Manipulate string in for loop

关于字符串操作,我对 Python 还很陌生。 我有一个包含一些对象标签的字段,我想在它之前或之后插入文本。 为此,我使用列表中的值来搜索特定值的字符串。 一旦我这样做了,我就不能操纵所有找到的结果,只能操纵一个值。 我知道字符串在 Python(不可变)中的工作方式不同,但不知道如何以任何其他方式解决此问题。

objectList = [('Object A','Object B','Object C', 'Object D')]
objectString = '"Object A", "Object B", "Object C", "Object D"'

def transform_toString(objects, old_format):
    obj = objects
    new_format = old_format
    for o in obj:
        position = new_format.find(str(o))
        new_format = new_format[:position] + ' found' + new_format[position:]
    return new_format
    
transformed_string = transform_toString(objectList, objectString)

这导致以下输出:

"Object A", "Object B", "Object C", "Object D found"

如何实现以下输出?

“找到对象 A”、“找到对象 B”、“找到对象 C”、“找到对象 D”

您非常接近,因为您将元组放在列表中,因此遍历 objectList 将不起作用。您必须遍历 objectList[0],因为此列表仅包含一个元素。

此外,您还必须根据字符串的长度调整位置。

objectList = [('Object A','Object B','Object C', 'Object D')]
objectString = '"Object A", "Object B", "Object C", "Object D"'

def transform_toString(objects, old_format):
    obj = objects # you dont need that
    new_format = old_format # you dont need that
    for o in obj[0]:
        position = new_format.find(str(o))
        if position == -1:
            continue
        objlen = len(o)
        position = new_format.find(str(o)) + objlen
        new_format = new_format[:position] + ' found' + new_format[position:]
    return new_format
    
transformed_string = transform_toString(objectList, objectString)

您的代码中存在多个错误。

  1. 我建议您安装一个 IDE 调试器,这样您就可以跳入 forloop 并查看那里发生了什么。

  2. 如果仔细观察,您会发现您正在迭代一个包含 1 个元素的数组,即 ('Object A','Object B','Object C', 'Object D')(它是一个包含 4 个项目的元组)并且您正在搜索对于字符串中的整个元组。这通常会导致不同编程语言的错误,但是在这里它试图找到整个元组

  3. 它在最后写 found 的原因是,如果您查看 return 值(我也建议查看文档)iit returns -1 表示未找到该元素。在 python 中,-1 表示数组中的最后一个元素(在本例中是字符串中的最后一个字符)

但是,如果你修复了类型,结果仍然不是你想要的。如果您删除 parantases,您将得到 " foundObject A", " foundObject B", " foundObject C", " foundObject D"。为了解决这个问题,您需要将指针 (position) 移动字长的偏移量。

固定码:

objectList = ['Object A', 'Object B', 'Object C', 'Object D']
objectString = '"Object A", "Object B", "Object C", "Object D"'


def transform_toString(objects, old_format):
    obj = objects
    new_format = old_format
    for o in obj:
        position = new_format.find(str(o))
        if position == -1:
            continue
        position += len(o)
        new_format = new_format[:position] + ' found' + new_format[position:]
    return new_format


transformed_string = transform_toString(objectList, objectString)
print(transformed_string)
#  "Object A found", "Object B found", "Object C found", "Object D found"

此外,我建议您先尝试调试您的代码,然后再提出问题。这似乎是学校交给你的一项简单任务。