在 python 中使用嵌套 for 循环处理多维列表?

Processing multidimensional lists with nested for loops in python?

我正在为 Nuke - The foundry 编写代码。我已经苦苦思索了 3 个小时了.. 查找 google 但没有成功 我想做的基本上是创建二维列表并用一些东西填充它.. 在我的例子中,我想用 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 一种 节点1 一个

我希望它看起来像:

结果:

节点 1 一种 节点2 一个

注意:也许有更优雅的解决方案?

我通常通过向列表附加值来填充列表。这样你就不需要提前知道列表的大小。您试图从所需的输出中尝试做的事情似乎是将 selectedNodes 放入二维数组 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'