Python附加2D数组?

时间:2016-06-24 16:25:11

标签: python maya

在中断了大约8个月后,我已经有一段时间做python脚本了。真的需要一些见解。 我一直试图通过编码设置或修改相机filmback / film gate属性,经过多次试验和错误后,我终于找到了它的命令,但现在我正在遇到其他一些问题..

列表中的第一项,用Python术语 - 索引通常从0开始,但是在这个filmbackMenu的Maya术语中,它从1开始。

cmds.optionMenu('filmbackMenu', edit = True, select = 0) # Errors-out, stating that it is out of range
cmds.optionMenu('filmbackMenu', edit = True, select = 1) # No errors

假设我的filmback菜单如下:

list01 = ['itemA-01', 'itemB-02', 'itemC-02', 'itemD-01', 'itemE-01', 'itemF-03']
list01.insert(0,"")
for index, item in enumerate(list01):
    print index, item

虽然我设法找到一种让我的项目从索引开始的方法' 1'通过插入假/空白.. 当我试图过滤掉包含' -01'并将名称和索引附加到list02中,但我只知道如何处理名称或索引,但我相信我需要两者。这是我的代码部分:

list02 = []
for i in list01:
    if '-01' in str(i):
        list02.append(i)
# Result: ['itemA-01', 'itemD-01', 'itemE-01']  # The index here should be 1, 4, 5 

是否可以将名称和索引一起追加?例如,itemA-01 1,' itemD-01' 4,' itemE-01' 5? 索引不需要在UI中显示,名称也会这样做,我仍然需要最终获取索引值...

请在下面查看我的代码,或许可以提供更好的见解,如果需要,请随时批评。

import maya.cmds as cmds

list01 = ['itemA-01', 'itemB-02', 'itemC-02', 'itemD-01', 'itemE-01', 'itemF-03']
list01.insert(0,"")
for index, item in enumerate(list01):
    print index, item

list02 = []
for i in list01:
    if '01' in str(i):
        list02.append(i)

window = cmds.window()
cmds.columnLayout()
cmds.optionMenu (label = 'Select a format')
for x in list02:
    cmds.menuItem(label=x)
cmds.button( label = 'Ok')
cmds.button( label = 'Cancel')

cmds.showWindow( window )

在我的UI中发生的是,在用户选择时,例如。如果我选择了索引为4的itemD-01,则应运行以下代码:

cmds.optionMenu('filmbackMenu', edit = True, select = 4)

请注意,select的标志将被更改..

1 个答案:

答案 0 :(得分:1)

您不需要在列表枚举中添加虚拟元素,而第二个参数指示它应该从哪个位置开始。使用此方法,您可以将索引和项目并排存储在单独的列表中

list02 = []

list01 = ['itemA-01', 'itemB-02', 'itemC-02', 'itemD-01', 'itemE-01', 'itemF-03']
for index, item in enumerate(list01, 1):
    if '-01' in item:
        list02.append([index, item])

print(list02)

结果

[[1, 'itemA-01'], [4, 'itemD-01'], [5, 'itemE-01']]

您甚至可以将其转变为优雅的列表理解

result = [[index, item] for index, item in enumerate(list01, 1) if '-01' in item]