2017-06-01 54 views
0

我已經使用列表中的元素生成了所有可能的組合,如解釋here所述。現在,我想知道如何將每個組合保存爲列表。 我得到這樣的輸出:如何創建組合列表

[('A',), 
('B',), 
('A','B') 
    ......] 

我會得到這樣的事情:

[['A'],['B'],['AB'], ...... ] 

有沒有實現它的簡單方法?

+0

首先決定是否要每個組合的**列表**或作爲**字符串**(''AB'是一個字符串,而'['A','B']'是兩個字符串的列表)。 –

回答

4

你可以使用map像這樣:

combinations = [('A',), 
       ('B',), 
       ('A','B')] 

combinations_list = map(list, combinations) 

這將返回一個generator(Python3)或list(Python2)。如果你想要一個list只是將它轉換爲列表:

combinations_list = list(map(list, combinations)) 

這將在內部的元組結構轉換到一個列表:

[("A"), ("B"), ("A", "B")] -> [["A"], ["B"], ["A", "B"]] 

如果你也想變平的元組得到以下結果:

[("A"), ("B"), ("A", "B")] -> [["A"], ["B"], ["AB"]] 

你應該改變map的第一個參數此:

lambda sub_tuple: ["".join(sub_tuple)] 
+0

['map'](https://docs.python.org/3/library/functions.html#map)僅在** Python 3 **,** Python 2 **中返回'iterator'對象** [ map'](https://docs.python.org/2/library/functions.html#map)返回'list'對象(while ['itertools.imap'](https://docs.python.org/2 /library/itertools.html#itertools.imap)返回迭代器) –

+0

你說得對,應該指出。我開始習慣於僅在Python3中工作。 – Strinnityk

+0

沒關係,** Python 3 **很棒 –

3

如果你說你有一個元組列表,並且要列出清單,你可以使用

list_of_lists = [list(t) for t in list_of_tuples] 

轉換,或者你可以使用map

在Python 2:

list_of_lists = map(list, list_of_tuples) 

在Python 3:

list_of_lists = list(map(list, list_of_tuples)) 
1

繼OP鏈接的example

from itertools import combinations 
lis = ['A', 'B', 'C', 'D'] 
result = [] 
for i in range(1, len(lis)+1): 

    result+=[''.join(c) for c in combinations(lis, i)] 

print(result) 

['A', 'B', 'C', 'D', 'AB', 'AC', 'AD', 'BC', 'BD', 'CD', 'ABC', 'ABD', 'ACD', 'BCD', 'ABCD'] 

編輯

同爲一個班輪:

result = [''.join(c) for i in range(1,len(lis)+1) for c in combinations(lis,i)] 
0

你可以使用一個列表理解與str.join

>>> combinations = [('A',), ('B',), ('A','B')] 
>>> [[''.join(comb)] for comb in combinations] 
[['A'], ['B'], ['AB']] 

取而代之的是列表理解,你也可以使用一個發電機的表達:

>>> combs_as_lists = ([''.join(comb)] for comb in combinations) 
>>> for comb in combs_as_lists: 
...  print(comb) 
['A'] 
['B'] 
['AB']