2011-07-19 9 views
6

के सभी संभावित मामलों का संयोजन मैं पाइथन में एक स्ट्रिंग के सभी संभावित पूंजीकरण मामलों को उत्पन्न करने के लिए एक प्रोग्राम बनाने की कोशिश कर रहा हूं। उदाहरण के लिए, 'abcedfghij' दिया गया है, मैं एक प्रोग्राम उत्पन्न करना चाहता हूं: Abcdefghij ABCdef .. । । एबीसीडीएफ .. । एबीसीडीएफजीएचजेस्ट्रिंग

और इसी तरह। मैं इसे करने का एक त्वरित तरीका खोजने की कोशिश कर रहा हूं, लेकिन मुझे नहीं पता कि कहां से शुरू करना है।

+1

यकीन नहीं है कि यहां डाउनवॉट क्यों हैं? स्पष्ट प्रश्न, भले ही स्पष्ट कारण न हो, कई और मामूली प्रश्न पूछे जाते हैं और कम नहीं किए जाते हैं? – agf

उत्तर

7
from itertools import product, izip 
def Cc(s): 
    s = s.lower() 
    for p in product(*[(0,1)]*len(s)): 
     yield ''.join(c.upper() if t else c for t,c in izip(p,s)) 

print list(Cc("Dan")) 

प्रिंट:

['dan', 'daN', 'dAn', 'dAN', 'Dan', 'DaN', 'DAn', 'DAN'] 
+0

धन्यवाद। यह पूरी तरह से काम कर रहा है। मैंने कभी ऐसा नहीं सोचा होगा। मैं एक पुनरावर्ती विधि की कोशिश कर रहा था और यह बहुत लंबा समय ले रहा था। – peacey

+4

आप इसे भी कम कर सकते हैं: उत्पाद में टी के लिए वापसी ('' .join (टी) (* ज़िप (एस। लॉवर(), एस। अपपर())) '। –

0
import itertools 

def comb_gen(iterable): 
    #Generate all combinations of items in iterable 
    for r in range(len(iterable)+1): 
     for i in itertools.combinations(iterable, r): 
      yield i 


def upper_by_index(s, indexes): 
    #return a string which characters specified in indexes is uppered 
    return "".join(
       i.upper() if index in indexes else i 
       for index, i in enumerate(s) 
       ) 

my_string = "abcd" 

for i in comb_gen(range(len(my_string))): 
    print(upper_by_index(my_string, i)) 

आउट:

दान के समाधान के लिए
abcd Abcd aBcd abCd abcD ABcd AbCd AbcD aBCd aBcD abCD ABCd ABcD AbCD aBCD ABCD 
10

ही तरह, लेकिन बहुत सरल:

>>> import itertools 
>>> def cc(s): 
...  return (''.join(t) for t in itertools.product(*zip(s.lower(), s.upper()))) 
... 
>>> print list(cc('dan')) 
['dan', 'daN', 'dAn', 'dAN', 'Dan', 'DaN', 'DAn', 'DAN']
संबंधित मुद्दे