2011-07-19 12 views
6

Estoy tratando de crear un programa para generar todos los posibles casos de mayúsculas de una cadena en python. Por ejemplo, dado 'abcedfghij', quiero que un programa genere: Abcdefghij ABcdef .. . . aBcdef .. . ABCDEFGHIJCombinación de todos los casos posibles de una cadena

Y así sucesivamente. Estoy tratando de encontrar una forma rápida de hacerlo, pero no sé por dónde empezar.

+1

No estoy seguro de por qué los votos hacia abajo aquí? Pregunta clara, aunque no sea una razón clara, ¿se hacen muchas más preguntas triviales y no se bajan? – agf

Respuesta

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

impresiones:

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

Gracias. Eso está funcionando perfectamente. Nunca hubiera pensado hacerlo de esta manera. Estaba probando un método recursivo y me estaba tomando demasiado tiempo. – peacey

+4

Puede hacer esto aún más corto: 'return ('' .join (t) para t en product (* zip (s.lower(), s.upper())))'. –

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

Out:

abcd Abcd aBcd abCd abcD ABcd AbCd AbcD aBCd aBcD abCD ABCd ABcD AbCD aBCD ABCD 
10

similares a la solución de Dan, pero mucho más simple:

>>> 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']
Cuestiones relacionadas