0

我正在为 Nuke - The Foundry 编写代码.. 我已经敲了 3 个小时了.. 在谷歌上查找但没有成功我想要做的基本上是创建二维列表并用一些东西填充它.. 在我的情况我想用 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 一个

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

4

1 回答 1

1

我通常通过向列表附加值来填充列表。这样您就不需要提前知道列表的大小。您似乎想要从您想要的输出中做的事情是selectedNodes进入 2D array db。似乎db[i][0]应该是nuke.selectedNodes()[i]whiledb[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'
于 2017-01-01T19:10:14.943 回答