2015-11-08 36 views
1

对不清楚的描述,我编辑了这个问题。在不同列表中合并项目,python

英语不是我的母语,所以我可能会表达不太好。 :)

我有这样一个字符串列表:

list1=['1A','1B','1C','1D','1E'] 
list2=['_foo','_bar','_baz','_qux'] 
_foo=['30','40'] 
_bar=[] 
_baz=['60','70'] 
_qux=[] 

我想通过list1list2迭代,并在_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 
+1

请注意,'2A'或'2C'在Python中是无效的语法。那么'list2'在这里做什么? –

回答

3

在蟒蛇(不要紧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,现在这个答案是他的答案的更多扩展。我添加的是使用(本地或全局)变量而不是硬编码的方式。检查文档globalslocals

希望它可以帮助

+0

我已根据基本要求更改了答案。正如我现在所说,它是@Xavier的延伸。 –

+0

谢谢!你的回答也解决了我的问题。 – littlewilliam

+0

我可以说使用'globals'或'locals'是一个非常不好的习惯。 –

1

一般的技巧是当你想使用的变量名作为参数是为使用一个列表,如果变量的名称是像var1, var2, var3, ...或dictionnary否则

这里一个dictionnay符合要求所以你可以做

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

哇,谢谢!你的答案解决了我的问题:-) – littlewilliam