第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在遞歸函數(shù)中訪問全局變量

在遞歸函數(shù)中訪問全局變量

慕尼黑8549860 2021-06-04 01:17:52
我編寫了一個遞歸函數(shù),它創(chuàng)建 nx3 數(shù)據(jù)的所有可能結(jié)果的組合,其中 n 是可變的數(shù)據(jù)點的結(jié)構(gòu)[name_of_variable cluster_number uniqueness_condition]from collections import defaultdictx= [[1,1,'a'],[2,1,'b'],[3,1,'c'],[4,2,'c'],[5,2,'d'],[6,2,'a'],[7,3,'a'],[8,3,'d']]c=defaultdict(list)for i in x:    c[i[1]]+=[i]w=list()def rec_cal(i,lis):    if i in c.keys():        for j in c[i]:            lis.append(j[0])            rec_cal(i+1,lis)            lis.pop()    else:        global w        w.append(lis)##print(lis)rec_cal(1,[])我試圖將所有生成的 3 對存儲在 w 中,但最后我得到一個空列表,我哪里出錯了,任何幫助將不勝感激ps 如果寫 print(lis) 而不是 w.append(lis) 打印所有正確的列表。
查看完整描述

2 回答

?
溫溫醬

TA貢獻1752條經(jīng)驗 獲得超4個贊

當您打電話時,w.append(lis)您將引用附加到列表lis,而不是列表的副本。lis當遞歸函數(shù)返回時,您附加的所有內(nèi)容也會彈出,因此您將獲得的所有內(nèi)容w將是對同一個空列表的大量引用。

另外,不要做i in c.keys(),只要做i in c,你就不會為 分配一個新值w,所以沒有必要使用global w.


查看完整回答
反對 回復(fù) 2021-06-15
?
慕娘9325324

TA貢獻1783條經(jīng)驗 獲得超4個贊

跑步

w[0] is w[1]

可能會幫助您了解它失敗的原因。您附加的所有引用都指向同一個對象。

更換

w.append(lis)

w.append(lis.copy())

是一個快速修復(fù)。但是一般來說,變異列表和引用列表要小心。


查看完整回答
反對 回復(fù) 2021-06-15
  • 2 回答
  • 0 關(guān)注
  • 281 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號