2014-11-23 38 views
0

我正在寻找一种方法来产生与当前索引的所有组合的列表保持维护:生成所有组合的列表并保持索引位置

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

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')] 

我正在寻找的是一个解决方案,使或可convertet下面的字符串:

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]) 

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

最佳, 基督教

+0

检查我的答案,如果这有助于不要忘记接受它。 – 2014-11-23 10:53:20

回答

1

而不是直接追加的结果,你可以使用列表理解[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']]