2015-11-08 21 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