2016-06-24 2 views
1

私は約8ヶ月の休憩の後にPythonスクリプティングをしています。本当にいくつかの洞察力が必要です。 私は、カメラのフィルムバック/フィルムのゲート属性をコーディングで設定または変更しようとしていましたが、多くの試行錯誤の末に、最後にコマンドを見つけましたが、今は別の問題を抱えています...Pythonは2D配列を追加しますか?

最初の項目

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 

: - リストで、Pythonの用語でインデックスは通常、しかし、マヤ語のこのfilmbackMenuのために、0から始まり、それは次のように私のフィルムバックのメニューがある場合と仮定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 

から始まります私はその方法を見つけることができます私の項目は、ダミー/空白を挿入してインデックス '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で起こることは、ユーザーの選択に応じてです。私はitemD-01指数4で選択された場合は、次のコードを実行する必要があります

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

を選択するためのフラグが変更されることに注意してください。..

答えて

1

あなたはダミーの要素を追加する必要はありませんあなたのリストに列挙する列挙体は、それが開始されるべき位置を示す2番目の引数を持ちます。このあなたが別のリスト

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] 
+0

クールに並んで、インデックスとアイテム側を保存することができます使用して、私はこのように列挙できることを知らなかった... 'cmd'buttonの' command'フラグの値をどのように返すことができるかどうか考えていらっしゃいましたか? 'print item'のようなものを試してみたところ、最後の項目はlist02 .. – dissidia

+0

のように印刷されます。' cmds.optionMenu( 'filmbackMenu'、edit = True、select = list02 [0]) '?...私はマヤに慣れていないか、ユーザーがボタンをクリックしたときに値を返すことを意味する – danidee

+0

'cmds.button(label = 'Ok'、command =( 'print list02 [0]'))のような簡単なことをしています。実際には、選択に基づいてインデックス値を取得/返そうとしています。 UIは関数内にあります。 'def ui()'は、実行全体が別の関数で行われるものです。 – dissidia

関連する問題