列表中的查找和替换功能出现问题

时间:2020-10-28 17:24:53

标签: python-3.x

我的代码:

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循环,该循环查找一个项目并将其替换为替换值。我递归地得到了替换项,但是我需要将它替换成一个循环,而且,包含替换项的列表会返回到之前和之后的列表中。有谁知道我该如何解决这个问题?

2 个答案:

答案 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返回的第一项。