递归期间列表和元组的行为

时间:2017-09-07 13:10:19

标签: python list recursion tuples

我有兴趣理解为什么列表和元组的行为方式不同,使用递归函数来跟踪决策树分支中使用的参数。

该函数将整数作为输入(字典键)和空元组。将打印键,其对应值和空元组。然后将整数“添加”到元组,并以递归方式对每个值调用函数,将元组传递给used_keys。

data = {0:[1,2,3],1:[4],2:[4],3:[4]}

# 
def recursive(key, used_keys=()):
    print("used_keys: " + str(used_keys))
    print(key, data[key])
    used_keys += (key,)
    for k in data[key]:
        try:
            recursive(k, used_keys=used_keys)
        except KeyError:
            pass

if __name__ == '__main__':
    recursive(0)`

在这种情况下,结果如我所料。当第一个键值对中的值[1,2,3]循环时,used_keys显示[0,1],[0,2]和[0,3]。但是,当您使用如下所示的列表替换元组时,行为会更改:

def recursive(key, used_keys=[]):
    print("used_keys: " + str(used_keys))
    print(key, data[key])
    used_keys += [key]
    for k in data[key]:
        try:
            recursive(k, used_keys=used_keys)
        except KeyError:
            print("End")

在这种情况下,在先前循环中迭代的所有键都保留在used_keys中,键1表示[0,1],键2表示[0,1,2],键3表示[0,1,2,3]

谢谢!

0 个答案:

没有答案