如何创建组合列表

时间:2017-06-01 09:19:29

标签: python string list

我使用列表中的元素生成了所有可能的组合,如here所述。现在,我想知道如何将每个组合保存为列表。 我得到了这个输出:

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

我会得到这样的东西:

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

有没有一种简单的方法来实现它?

4 个答案:

答案 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']