2017-06-01 67 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']