Python cómo escribir en mayúsculas algunos caracteres en cadena

Esto es lo que quiero hacer pero no funciona:

mystring = "hello world" toUpper = ['a', 'e', 'i', 'o', 'u', 'y'] array = list(mystring) for c in array: if c in toUpper: c = c.upper() print(array) 

"e" y "o" no están en mayúsculas en mi matriz.

Puede usar el método str.translate() para que Python reemplace los caracteres por otros caracteres en un solo paso.

Utilice la función string.maketrans() para asignar caracteres en minúsculas a sus destinos en mayúsculas:

 try: # Python 2 from string import maketrans except ImportError: # Python 3 made maketrans a static method maketrans = str.maketrans vowels = 'aeiouy' upper_map = maketrans(vowels, vowels.upper()) mystring.translate(upper_map) 

Esta es la forma más rápida y más “correcta” de reemplazar ciertos caracteres en una cadena; siempre puedes convertir el resultado de mystring.translate() en una lista, pero sospecho que quisieras terminar con una cadena en primer lugar.

Manifestación:

 >>> try: ... # Python 2 ... from string import maketrans ... except ImportError: ... # Python 3 made maketrans a static method ... maketrans = str.maketrans ... >>> vowels = 'aeiouy' >>> upper_map = maketrans(vowels, vowels.upper()) >>> mystring = "hello world" >>> mystring.translate(upper_map) 'hEllO wOrld' 

No estás haciendo cambios a la lista original. Está realizando cambios solo en la variable de bucle c . Como solución puede intentar usar enumerate .

 mystring = "hello world" toUpper = ['a', 'e', 'i', 'o', 'u', 'y'] array = list(mystring) for i,c in enumerate(array): if c in toUpper: array[i] = c.upper() print(array) 

Salida

 ['h', 'E', 'l', 'l', 'O', ' ', 'w', 'O', 'r', 'l', 'd'] 

Nota: Si desea que hEllO wOrld sea ​​la respuesta, también puede usar join como en ''.join(array)

Tu puedes hacer:

 mystring = "hello world" toUpper = ['a', 'e', 'i', 'o', 'u', 'y'] >>> ''.join([c.upper() if c in toUpper else c for c in mystring]) hEllO wOrld 

El problema es que al c no se usa para nada, esto no está pasando por referencia.

Yo lo haría, para principiantes:

 mystring = "hello world" toUpper = ['a', 'e', 'i', 'o', 'u', 'y'] array = [] for c in mystring: if c in toUpper: c = c.upper() array.append(c) print(''.join(array)) 

Usa la expresión del generador como tal:

 newstring = ''.join(c.upper() if c in toUpper else c for c in mystring) 

Esto hará el trabajo. Tenga en cuenta que las cadenas son inmutables, por lo que tendrá que hacer alguna variación en la construcción de nuevas cadenas para que esto funcione.

 myString = "hello world" toUpper = ['a', 'e', 'i', 'o', 'u', 'y'] newString = reduce(lambda s, l: s.replace(l, l.upper()), toUpper, myString) 

Por favor, pruebe este

 mystring = "hello world" toUpper = ['a', 'e', 'i', 'o', 'u', 'y'] array = list(mystring) new_string = [x.upper() if x in toUpper else x for x in array ] new_string = ''.join(new_string) print new_string