组合不同列表中的项目,python

时间:2015-11-08 04:55:32

标签: 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中的项不是空列表,则映射list1list2中的项目,并将它们组合为输出格式。

我希望输出像这样:

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

2 个答案:

答案 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,现在这个答案更多地是他的答案。我添加的是一种使用(本地或全局)变量而不是硬编码的方法。查看globalslocals的文档。

希望有所帮助

答案 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