我的代码:
def findAndReplace(orig, toFind, replacement):
while orig.count(toFind) != 0:
idx = orig.index(toFind)
orig.remove(toFind)
orig.insert(idx, replacement)
rLst = findAndReplace(orig, toFind, replacement)
return (rLst)
return orig
#我需要一个for或while循环,该循环查找一个项目并将其替换为替换值。我递归地得到了替换项,但是我需要将它替换成一个循环,而且,包含替换项的列表会返回到之前和之后的列表中。有谁知道我该如何解决这个问题?
答案 0 :(得分:0)
您的代码的问题是它使用while循环,并且也是递归的。在while循环内,该函数将使用相同的确切参数再次调用,从而生成无用的循环。另外,当到达第一个“ return”语句时,函数将停止,因此return orig
语句将永远不会执行。
一种更好的方法是使用for循环:
def findAndReplace(orig, toFind, replacement):
for i, element in enumerate(orig):
if element == toFind:
orig[i] = replacement
return orig
使用带有枚举功能的for循环,您可以获取列表的每个元素及其索引。此函数遍历整个列表,检查它当前所在的元素是否是要替换的元素,如果是,则替换它。这样,将替换列表中与toFind参数匹配的每个元素。 但是请确保不要在字符串上使用此函数,因为它们是不可变的,您会收到错误消息!
另一种解决方法是使用列表理解:
def findAndReplace(orig, toFind, replacement):
return [replacement if element == toFind else element for element in orig]
在任何一种情况下,该函数都会返回带有替换值的新列表,因此使用此函数的示例如下所示:
a = ["pizza", "pasta", "replaceme"]
a = findAndReplace(a, "replaceme", "spaghetti")
答案 1 :(得分:0)
我稍微更改了您的代码
def findAndReplace(orig, toFind, replacement, ret_orig=0):
while orig.count(toFind) != 0:
idx = orig.index(toFind)
orig.remove(toFind)
orig.insert(idx, replacement)
rLst = findAndReplace(orig, toFind, replacement)
if ret_orig == 1:
return (rLst)
else:
return orig
list = ["awdr", "oper", "thr", "oper"]
print(findAndReplace(list, "oper", "repo"))
但是其他的回报很好! 或者你很自豪地使用
def findAndReplace(orig, toFind, replacement):
rLst = str()
while orig.count(toFind) != 0:
idx = orig.index(toFind)
orig.remove(toFind)
orig.insert(idx, replacement)
rLst = findAndReplace(orig, toFind, replacement)
return [orig, rLst]
list = ["awdr", "oper", "thr", "oper"]
print(findAndReplace(list, "oper", "repo")[0])
请注意,我已经使用[0]表示返回我(替换列表或)findAndReplace返回的第一项。