2012-04-28 8 views
7

のセットのリストを作成します。私はこのような原子の配列を持っていると言うの原子

(長さはいずれであってもよい)

['a', 'b', 'c'] 

そして、私がすることができセットのリストを作成したいですそれらと一緒に作った:

[ 
    ['a'], ['b'], ['c'], 
    ['a', 'b'], ['a', 'c'], ['b', 'c'], 
    ['a', 'b', 'c'] 
] 

それは簡単にpythonで行うことはできますか?

多分、やるのは簡単ですが、私はそれを自分では得られません。
ありがとうございます。 powersetのように私に聞こえる

+0

あなたが道で、 '[ 'B'、 'C​​']を'逃しました。 ;) –

+0

@ Li-aungYip真実、そして修正:)ありがとう。 – Nuno

答えて

15

def powerset(iterable): 
    "powerset([1,2,3]) -->() (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)" 
    s = list(iterable) 
    return chain.from_iterable(combinations(s, r) for r in range(len(s)+1)) 
+0

'1'から始めると、空のタプルが失われます – jamylak

+1

それを釘付けにしました。私のupvotesを取る。 ( 'itertools':そこに何か*できない?) –

+0

パーフェクト!あなたは私の一日を作った! :) どうもありがとうございました! – Nuno

4

簡単。 itertools.combinations()を使用します。

from itertools import combinations 

atom = list('abc') 

combs = [i for j in range(1, len(atom) + 1) for i in combinations(atom, j)] 

得た:

[('a',), ('b',), ('c',), ('a', 'b'), ('a', 'c'), ('b', 'c'), ('a', 'b', 'c')] 
0

また、行うことができます。

from itertools import product 
masks = [p for p in product([0, 1], repeat=len(data))] 
combs = [[x for i, x in enumerate(data) if mask[i]] for mask in masks] 
関連する問題