2012-04-28 18 views
7

मैं इस तरह परमाणुओं की एक सरणी है कहते हैं:परमाणुओं के सेट की एक सूची बनाएं

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

(लंबाई किसी भी हो सकता है)

और मैं सेट है कि हो सकता है की एक सूची बनाना चाहते हैं उनके साथ बनाया गया:

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

क्या यह आसानी से पाइथन में करना संभव है?

शायद यह करना बहुत आसान है, लेकिन मुझे इसे स्वयं नहीं मिल रहा है।
धन्यवाद।

+0

आप '[ 'बी', 'सी']', याद माध्यम से। ;) –

+0

@ ली-औंगवाईप सच है, और तय :) धन्यवाद। – Nuno

उत्तर

15

कि powerset की तरह मेरे लिए लगता है:

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' से शुरू करते हैं, तो खाली tuple – jamylak

+1

खोने से इसे हटा दिया गया। मेरे अपवॉट ले लो। ('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] 
संबंधित मुद्दे