在 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'
我正在为 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'