python - 如何在递归期间创建和编辑列表?

标签 python list recursion

我需要创建一个返回两个列表的函数。第一个是包含“found”和“dummy”的字符串列表,指示两个列表中的数字相同的元素。第二个列表包含一定数量的整数,范围由参数“colors”给出,该参数返回找到特定数字的次数。目前我已经完成了第一个列表的任务,但第二个列表让我有点困惑。另外,在这个过程中必须使用递归。这是到目前为止的代码

def find(code, guess, colors):
    if guess == []:
        return []
    else:
        if guess[0] == code[0]:
            return ["found"] + find(code[1:], guess[1:], colors)
        else:
            return ["dummy"] + find(code[1:], guess[1:], colors)

可能的结果如下:

>>> find([1,2,3],[3,2,1],6)
[[’dummy’, ’found’, ’dummy’], [0, 0, 1, 0, 0, 0]]

最佳答案

我会选择这样的东西:

def find(code, guess, colors):
    def sub(code, guess, lst1, lst2):
        if guess:
            if guess[0] == code[0]:
                lst2[code[0]] += 1
                return sub(code[1:], guess[1:], lst1+["found"], lst2)
            else:
                return sub(code[1:], guess[1:], lst1+["dummy"], lst2)
        else:
            return lst1, lst2
    return sub(code, guess, [], [0]*colors)

然后

>>> print(find([1,2,3], [3,2,1], 6))
(['dummy', 'found', 'dummy'], [0, 0, 1, 0, 0, 0])

关于python - 如何在递归期间创建和编辑列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26599162/

相关文章:

python - 从字符串中删除括号和特殊字符并转换列表(值以逗号分隔)

python - 检查列表中有多少个相邻数字大于前一个数字?

javascript - 相互递归和 JSLint - 函数在定义之前被使用

python带通滤波器-奇异矩阵误差

python - “方法包装器”对象在 AES CTR pycrypto 库中不可迭代

python - 在python中将非对称3维列表转换为列表的2维列表

使用递归的 Java 多米诺骨牌平铺 : second if block gets called with already updated values

r - R中的尾递归

python - SQLAlchemy 声明性语法中具有抽象基的多态多对多关系

python - 使用嵌套的 'for' 语句加速 Python 'if' 循环