对于不清楚的描述感到抱歉,我已编辑过这个问题。
英语不是我的母语,所以我可能表达的不是很好。 :)
我有一个像这样的字符串列表:
list1=['1A','1B','1C','1D','1E']
list2=['_foo','_bar','_baz','_qux']
_foo=['30','40']
_bar=[]
_baz=['60','70']
_qux=[]
我想迭代list1
和list2
,然后匹配
_foo
和_baz
中的指定项目。
具体而言,list2
中的项目代表另一个列表。例如,_foo
中的list2
也是列表_foo=['30','40']
。但_bar
为空。如果list2
中的项不是空列表,则映射list1
到list2
中的项目,并将它们组合为输出格式。
我希望输出像这样:
1A-30,1A-40,1A-60,1A-70
1B-30,1B-40,1B-60,1B-70
1C-30,1C-40,1C-60,1C-70
1D-30,1D-40,1D-60,1D-70
1E-30,1E-40,1E-60,1E-70
答案 0 :(得分:3)
在python中(无关紧要2或3)你可以做类似
的事情list1=['1A','1B','1C','1D','1E']
list2=['_foo','_bar','_baz','_qux']
_foo=['30','40']
_bar=[]
_baz=['60','70']
_qux=[]
comb = {}
# NEW
for _i in list2:
comb[_i] = globals()[_i]
for _i in list1:
output=[]
for _j in list2:
output.extend([_i+'-'+ _k for _k in comb[_j]])
print(','.join(output))
它会返回
1A-30,1A-40,1A-60,1A-70
1B-30,1B-40,1B-60,1B-70
1C-30,1C-40,1C-60,1C-70
1D-30,1D-40,1D-60,1D-70
1E-30,1E-40,1E-60,1E-70
修改强>
当你完全改变问题本身时,我同意@Xavier Combelle,现在这个答案更多地是他的答案。我添加的是一种使用(本地或全局)变量而不是硬编码的方法。查看globals或locals的文档。
希望有所帮助
答案 1 :(得分:1)
一般提示是当你想使用变量名作为参数时,如果变量名称是var1, var2, var3, ...
,则使用一个列表,否则使用dictionnary
这里的词典符合要求,所以你可以做到
list1=['1A','1B','1C','1D','1E']
list2=['_foo','_bar','_baz','_qux']
mapping = {"_foo":['30','40'],
"_bar":[],
"_baz":['60','70'],
"_qux":[],}
for primary in list1:
result = []
for item2 in list2:
result.extend([primary+"-"+secondary for secondary in mapping[item2]])
print(",".join(result))
结果:
1A-30,1A-40,1A-60,1A-70
1B-30,1B-40,1B-60,1B-70
1C-30,1C-40,1C-60,1C-70
1D-30,1D-40,1D-60,1D-70
1E-30,1E-40,1E-60,1E-70