2017-06-14 60 views
0

我試圖通過列表並使用變量的輔助列表打印出列表。Python:替換循環列表中的變量

問題是,列表中的變量正在分配和設置,但沒有正確打印輸出。這感覺像是一件非常簡單的事情,但我被困了一天左右。任何幫助,將不勝感激!

side = "" 
sideLong = "" 
sideShort = "" 
sideList = ["Right", "Left"] 


jointRemapList =[ 
    ["Char_Hips", "Root_M"], 
    ["Char_" + sideLong + "Finger1", "IndexFinger1_" + sideShort], 
    ["Char_" + sideLong + "Finger2", "IndexFinger2_" + sideShort] 
    ] 

for side in sideList: 
    sideLong = side 
    sideShort = side[0] 

    for jointPair in jointRemapList: 

     print sideLong, sideShort, jointPair 

預計產出將是:

Left L ['Char_Hips', 'Root_M'] 
Left L ['Char_LeftFinger1', 'IndexFinger1_L'] 
Left L ['Char_LeftFinger2', 'IndexFinger2_L'] 
Right R ['Char_Hips', 'Root_M'] 
Right R ['Char_RightFinger1', 'IndexFinger1_R'] 
Right R ['Char_RightFinger2', 'IndexFinger2_R'] 
+0

Python不會以這種方式保留指向變量的指針。 ''foo「+ bar'不是字符串」foo「,後綴爲」我們打印它時的任何一個條「,'bar'立即評估*並且字符串是」foo「+」 「。 –

回答

3

我認爲這個問題正在發生,因爲你正在創建jointRemapList以外的sideList循環。您希望列表由sideLongsideShort動態創建,因此您需要在循環的每個增量中重新創建它。像下面這樣:

side = "" 
sideLong = "" 
sideShort = "" 
sideList = ["Right", "Left"] 

for side in sideList: 
    sideLong = side 
    sideShort = side[0] 

    jointRemapList =[ 
     ["Char_Hips", "Root_M"], 
     ["Char_" + sideLong + "Finger1", "IndexFinger1_" + sideShort], 
     ["Char_" + sideLong + "Finger2", "IndexFinger2_" + sideShort] 
     ] 

    for jointPair in jointRemapList: 

     print sideLong, sideShort, jointPair 
+0

我同意這是更好的解決方案,雖然它會比Jared的'str.format'方法慢一點。 –

3

所以,問題是,你正在創建的字符串創建jointRemapList時,和更新sideLongsideShort不會在這些字符串中得到體現,因爲字符串immuatable。嘗試使用字符串格式。

from itertools import product 

joint_remap_list = [ 
    ["Char_Hips", "Root_M"], 
    ["Char_{side}Finger1", "IndexFinger1_{abbrev}"], 
    ["Char_{side}Finger2", "IndexFinger2_{abbrev}"] 
] 

sides = ["Left", "Right"] 

for side, pair in product(sides, joint_remap_list): 
    abbrev = side[0] 
    formatted = [s.format(side=side, abbrev=abbrev) for s in pair] 
    print side, abbrev, formatted 
+0

考慮在單獨的行上定義格式化列表。 'fmtd_joint_pair = [s.format(long = sideLong,short = sideShort)for s in jointPair]; print sideLong,sideShort,fmtd_join_pair'對我來說更好。 –

+0

@AdamSmith當然,完成了 –