python更新全局字典里面的递归函数

时间:2018-03-16 07:21:26

标签: python dictionary recursion

我试图找到列表中元素的所有排列,并将其添加到全局字典

代码:

outp={}
k=0
def func(i,arr):
    global outp
    global k
    arr=arr.copy()
    for j in range(i,len(list)):
        arr[i],arr[j] = arr[j],arr[i]
        if i!=j or i==0:
            k=k+1
            print("\n\n",arr,k)
            outp[k]=arr
            print("\n",outp)
        func(i+1,arr)

list = [1,2,3,8]
func(0,list)

以下输出: 直到第4个元素它正确更新。在第5个元素期间,它更新了字典中的第5个和第3个元素。我不知道为什么会这样。请帮助

[1, 2, 3, 8] 1

 {1: [1, 2, 3, 8]}


 [1, 2, 8, 3] 2

 {1: [1, 2, 3, 8], 2: [1, 2, 8, 3]}


 [1, 3, 2, 8] 3

 {1: [1, 2, 3, 8], 2: [1, 2, 8, 3], 3: [1, 3, 2, 8]}


 [1, 3, 8, 2] 4

 {1: [1, 2, 3, 8], 2: [1, 2, 8, 3], 3: [1, 3, 2, 8], 4: [1, 3, 8, 2]}


 [1, 8, 2, 3] 5

 {1: [1, 2, 3, 8], 2: [1, 2, 8, 3], 3: [1, 8, 2, 3], 4: [1, 3, 8, 2], 5: [1, 8, 2, 3]}

2 个答案:

答案 0 :(得分:1)

您需要在字典中放置数组的副本:

public String authenticate(String host, String user, String password) throws JSchException {
        JSch jsch = new JSch();
        Session session = jsch.getSession(user, host, 22);
        session.setPassword(password);
        Properties obj_Properties = new Properties();
        obj_Properties.put("StrictHostKeyChecking", "no");
        session.setConfig(obj_Properties);
        session.connect(5000);
        String version = session.getServerVersion();
        session.disconnect();
        return version;
    } 

答案 1 :(得分:0)

这是将列表复制到新列表的更好方法 arr=arr[:]
https://repl.it/repls/BronzeYellowConversion