在 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)
您的代码中存在多个错误。
我建议您安装一个 IDE 调试器,这样您就可以跳入 forloop 并查看那里发生了什么。
如果仔细观察,您会发现您正在迭代一个包含 1 个元素的数组,即 ('Object A','Object B','Object C', 'Object D')
(它是一个包含 4 个项目的元组)并且您正在搜索对于字符串中的整个元组。这通常会导致不同编程语言的错误,但是在这里它试图找到整个元组
它在最后写 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"
此外,我建议您先尝试调试您的代码,然后再提出问题。这似乎是学校交给你的一项简单任务。
关于字符串操作,我对 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)
您的代码中存在多个错误。
我建议您安装一个 IDE 调试器,这样您就可以跳入 forloop 并查看那里发生了什么。
如果仔细观察,您会发现您正在迭代一个包含 1 个元素的数组,即
('Object A','Object B','Object C', 'Object D')
(它是一个包含 4 个项目的元组)并且您正在搜索对于字符串中的整个元组。这通常会导致不同编程语言的错误,但是在这里它试图找到整个元组它在最后写
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"
此外,我建议您先尝试调试您的代码,然后再提出问题。这似乎是学校交给你的一项简单任务。