我使用列表中的元素生成了所有可能的组合,如here所述。现在,我想知道如何将每个组合保存为列表。 我得到了这个输出:
[('A',),
('B',),
('A','B')
......]
我会得到这样的东西:
[['A'],['B'],['AB'], ...... ]
有没有一种简单的方法来实现它?
答案 0 :(得分: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)]
答案 1 :(得分: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))
答案 2 :(得分: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)]
答案 3 :(得分: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']