簡體   English   中英

在Python中使用嵌套的for循環處理多維列表?

[英]Processing multidimensional lists with nested for loops in python?

我正在為Nuke-The Foundry編寫代碼。.我已經敲了三個小時了..在Google上查找但沒有成功,我要嘗試的工作基本上是創建二維列表並在其中填充一些內容。我的情況下,我想用db = [['nodeName1', 'inputnName1'], ['nodeName2', 'imputName2'], etc...]填充列表db = [['nodeName1', 'inputnName1'], ['nodeName2', 'imputName2'], etc...]

我用db = [[None for x in range(2)] for y in range (nMasks)]創建列表-其中nMasks是“ db”中應有多少行的變量

現在我想以某種方式用我的變量填充列表。

for i in range(len(db)): #row
    for j in range(len(db[i])): #element
        for n in nuke.selectedNodes():
            if j == 0:
                db[i][j] = n #populate list with node
            if j != 0:
                db[i][j] = 'a' #for now it's just an a and nothing more but ill have to change this to an actual nodeName 

這給了我想要的結果不同-當我這樣做時:

print db[0][0]['name'].value()
print db[0][1]

print db[1][0]['name'].value()
print db[1][1]

我得到結果:

結果:

節點1 a節點1 a

我希望它看起來像:

結果:

節點1 a節點2 a

注意:也許對此有更優雅的解決方案?

我通常通過將值附加到列表中來填充列表。 這樣,您無需事先知道列表的大小。 您似乎想要從所需的輸出中執行的操作是將selectedNodes放入2D數組db 似乎db[i][0]應該是nuke.selectedNodes()[i]db[i][1]應該是字符串。 我不太了解您的nMasks與所選節點的數量有什么關系,但是,如果您打算獲取所有所選節點,那么以下似乎更自然的獲取您想要的2D列表

sn = nuke.selectedNodes()
db = 
for n in nuke.selectedNodes():
    db.append([n,'a'])

編輯

獲得相同列表的方法有很多。 例如,您可以使用列表推導將其匯總為一行

db = [[n,'a'] for n in nuke.selectedNodes()]

但是,如果您想在問題的代碼中使用嵌套循環,可以這樣做

db = [[None for x in range(2)] for y in range (nMasks)]
for i in range(len(db)):
    for j in range(len(db[0])):
        if j == 0:
            db[i][j] = nuke.selectedNodes()[i] #populate list with node
        else:
            db[i][j] = 'a'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM