2010-02-19 8 views
5

मान लीजिए मेरे पास एक स्ट्रिंग के रूप में 4 शब्द हैं। मैं इस तरह उन सभी में कैसे शामिल हो सकता हूं?पायथन (क्रमपरिवर्तन?) में शब्दों का संयोजन

"orangeapple/orangegrapes/orangepear/applegrapes/applepear/grapespear/orangeapplegrapes/orangeapplepear/applegrapespear" 

मैं सोच रहा हूँ:

s = orange apple grapes pear 

परिणाम एक स्ट्रिंग होगा

list_words = s.split(' ') 
for l in list_words: 

और फिर गणना का उपयोग करें? क्या आप इस समारोह को करने के लिए उपयोग करेंगे?

+0

परिणाम महत्वपूर्ण में आदेश है? –

+0

नहीं, लेकिन मुझे लगता है कि चीजों को आसान बना देगा, है ना? (मैं सिर्फ एन्युमेरेट के साथ नया हूं) – TIMEX

+0

क्या आप ऑरेंजग्रेस्पीयर, अंगूर, नाशपाती भी चाहते हैं? इससे आपका प्रश्न अधिक समझ में आता है – forefinger

उत्तर

4

शायद यह वही है जो आप चाहते हैं?

s = "orange apple grapes pear" 

from itertools import product 
l = s.split() 
r='/'.join(''.join(k*v for k,v in zip(l, x)) 
      for x in product(range(2), repeat=len(l)) 
      if sum(x) > 1) 
print r 

(स्पष्टता के लिए) परिणाम 'एबीसी' पर चलाते हैं है:

bc/ac/ab/abc 

(पोस्टर से टिप्पणी के बाद अपडेट किया गया।)

+0

अगर मैं केवल शामिल शब्द चाहता हूं तो यह कैसे बदलेगा? दूसरे शब्दों में, मैं नहीं चाहता " एक "," बी ", या" सी "अकेले। (केवल जुड़े शब्द)। धन्यवाद। – TIMEX

+0

आपकी नई आवश्यकताओं के लिए अद्यतन उत्तर। –

1
s = 'orange apple grapes pear' 

list_words = s.split() 

num = len(list_words) 
ans = [] 
for i in xrange(1,2**num-1): 
    cur = [] 
    for j,word in enumerate(list_words): 
    if i & (1 << j): 
     cur.append(word) 
    if len(cur) > 1: 
    ans.append(''.join(cur)) 
print '/'.join(ans) 

इस सूची के सभी सबसेट देता है खाली एक, एकल शब्द, और उन सभी को छोड़कर शब्दों का। अपने उदाहरण के लिए: orangeapple/orangegrapes/applegrapes/orangeapplegrapes/orangepear/applepear/orangeapplepear/grapespear/orangegrapespear/applegrapespear

+0

धन्यवाद forefinger – TIMEX

1
>>> import itertools 
>>> from itertools import combinations 
>>> s = "orange apple grapes pear".split() 
>>> res=[] 
>>> for i in range(2,len(s)+1): 
...  res += [''.join(x) for x in combinations(s,i)] 
... 
>>> '/'.join(res) 
'orangeapple/orangegrapes/orangepear/applegrapes/applepear/grapespear/orangeapplegrapes/orangeapplepear/orangegrapespear/applegrapespear/orangeapplegrapespear' 
1
>>> s = "orange apple grapes pear".split() 
>>> '/'.join(''.join(k) for k in [[s[j] for j in range(len(s)) if 1<<j&i] for i in range(1<<len(s))] if len(k)>1) 
'orangeapple/orangegrapes/applegrapes/orangeapplegrapes/orangepear/applepear/orangeapplepear/grapespear/orangegrapespear/applegrapespear/orangeapplegrapespear' 
4
>>> from itertools import combinations 
>>> s = "orange apple grapes pear".split() 
>>> '/'.join([''.join(y) for y in [ x for z in range(len(s)) for x in combinations(s,z)] if len(y)>1]) 
'orangeapple/orangegrapes/orangepear/applegrapes/applepear/grapespear/orangeapplegrapes/orangeapplepear/orangegrapespear/applegrapespear' 
+0

हाँ +1: संयोजन यहां एक अच्छी पसंद है। –