Python:替换循环列表中的变量
我正在尝试遍历一个列表,并使用第二个变量列表打印出该列表 问题是列表中的变量被分配和设置,但没有正确打印出来。这感觉很简单,但我已经被难倒了一天左右。任何帮助都将不胜感激Python:替换循环列表中的变量,python,list,loops,Python,List,Loops,我正在尝试遍历一个列表,并使用第二个变量列表打印出该列表 问题是列表中的变量被分配和设置,但没有正确打印出来。这感觉很简单,但我已经被难倒了一天左右。任何帮助都将不胜感激 side = "" sideLong = "" sideShort = "" sideList = ["Right", "Left"] jointRemapList =[ ["Char_Hips", "Root_M"], ["Char_" + sideLong + "Finger1", "IndexFing
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']
我认为问题的出现是因为您在
侧列表
循环之外创建了jointRemapList
。您希望通过sideLong
和sideShort
动态创建列表,因此需要在循环的每个增量上重新创建它。例如:
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
我认为问题的出现是因为您在
侧列表
循环之外创建了jointRemapList
。您希望通过sideLong
和sideShort
动态创建列表,因此需要在循环的每个增量上重新创建它。例如:
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
因此,问题是在创建
jointRemapList
时创建字符串,而对sideLong
和sideShort
的更新不会反映在这些字符串中,因为字符串是不可修改的。尝试改用字符串格式
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
因此,问题是在创建
jointRemapList
时创建字符串,而对sideLong
和sideShort
的更新不会反映在这些字符串中,因为字符串是不可修改的。尝试改用字符串格式
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
Python不会以这种方式保留指向变量的指针
“foo”+bar
不是后缀为“打印时的任何条”的字符串“foo”,bar
立即求值,字符串为“foo”+“当前的任何条”。Python不会以这种方式保留指向变量的指针“foo”+bar
不是字符串“foo”,后缀为“打印时的任何条”,bar
立即计算,字符串为“foo”+“当前的任何条”。我同意这是更好的解决方案,虽然它会比贾里德的<代码> STR.Frase方法慢一点。我同意这是更好的解决方案,不过它会比贾里德的<>代码> St.Frase方法慢一点。考虑在一个单独的行上定义格式化列表。代码>fmtd_joint_pair=[s.format(long=sideLong,short=sideShort)表示jointPair中的s];打印边长,StDeScript,FMTDJEngIONGON/<代码>对我感觉更好。考虑在单独的行上定义格式化列表。代码>fmtd_joint_pair=[s.format(long=sideLong,short=sideShort)表示jointPair中的s];侧长、侧短、fmtd_join_pair打印对我来说感觉更好。