2017-03-07 48 views
0

假設:如何列表中的每個元素有兩個清單合併到其他列表

['a', 'b', 'c'], ['d', 'e', 'f'] 

我要的是:

'ad','ae','af','bd','be','bf','cd','ce','cf' 


first_list = ['a', 'b', 'c'] 
second_list = ['d', 'e', 'f'] 
combined_list = [] 
for i in first_list: 
    for j in second_list: 
     combined_list.append(i + j) 
print(combined_list) 

我的問題是,如果不僅有兩份名單,如何改進代碼? 例如,

first_list = ['a', 'b', 'c'] 
second_list = ['d', 'e', 'f'] 
third_list = ['g','h','q'] 
print ['adg','adh','adq','aeg','aeh',.......] 

傢伙,還有什麼可推廣的方式來表演n lists..I意思是,如果有什麼有超過三個列表?

回答

0

我還沒有測試過,但這應該工作。

first_list = ['a', 'b', 'c'] 
second_list = ['d', 'e', 'f'] 
third_list = ['g','h','q'] 
combined_list = [] 
for i in first_list: 
    for j in second_list: 
     for k in third_list: 
      combined_list.append(i + j + k) 
print(combined_list) 
+1

這不能推廣到任意數量的列表。該投票不是我的,順便說一句 – Alexander

+0

是的,它不是通用的...如果有n個列表? –

2

這被稱爲笛卡爾產品。

import itertools 

first_list = ['a', 'b', 'c'] 
second_list = ['d', 'e', 'f'] 
third_list = ['g','h','q'] 
lists = [first_list, second_list, third_list] 

cartesian_product = [''.join(x) for x in itertools.product(*lists)] 

print(cartesian_product) 

輸出:

['adg', 'adh', 'adq', 'aeg', 'aeh', 'aeq', 'afg', 'afh', 'afq', 
'bdg', 'bdh', 'bdq', 'beg', 'beh', 'beq', 'bfg', 'bfh', 'bfq', 
'cdg', 'cdh', 'cdq', 'ceg', 'ceh', 'ceq', 'cfg', 'cfh', 'cfq'] 

你可以在線試用,here

這裏是一個笛卡爾生產函數,你可以嘗試here的示例實現。

def cartesian_product(*lists): 
    if not lists: # base case 
     return [[]] 
    else: 
     this_list = lists[0] 
     remaining_lists = lists[1:] 
     return [ 
      [x] + p 
      for x in this_list 
       for p in cartesian_product(*remaining_lists) 
     ] 
+0

謝謝!順便說一句,你知道循環中的任何方式,我的意思是,用於...而不是itertools –

+0

當然,我可以做的實施。給我一些時間。 – Alexander

+0

@Lindadadad我會用一個生成器表達式來簡化這個,但是如果你願意,你可以將它轉換爲for循環 – Alexander

相關問題