生成所有组合的列表并维护索引位置

时间:2014-11-23 09:57:22

标签: python list insert indexing

我正在寻找一种方法来生成所有组合的列表,并保持其当前索引:

到目前为止,我一直在使用这种方法:

stuff = ['A', 'B', 'C']
for L in range(0, len(stuff)+1):
    for subset in itertools.combinations(stuff, L):
        a = subset
        list.append(a)

给出:

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

我正在寻找的是一种解决方案,它可以转换成以下字符串:

[(0, 0, 0), 
('A', 0, 0), 
('B', 0, 0), 
('C', 0, 0), 
('A', 'B', 0), 
('A', 0, 'C'), 
(0, 'B', 'C'), 
('A', 'B', 'C')]

最佳, 基督教

1 个答案:

答案 0 :(得分:1)

您可以使用列表推导[i if i in subset else 0 for i in stuff]

以所需格式生成新列表,而不是直接追加结果

你走了:

import itertools
stuff, result = ['A', 'B', 'C'], []
for L in range(0, len(stuff)+1):
    for subset in itertools.combinations(stuff, L):
        result.append([i if i in subset else 0 for i in stuff])

现在,如果你检查结果,

>>> print result
[[0, 0, 0], ['A', 0, 0], [0, 'B', 0], [0, 0, 'C'], ['A', 'B', 0], ['A', 0, 'C'], [0, 'B', 'C'], ['A', 'B', 'C']]