¿Cadena reemplazar vocales en Python?

Esperado:

>>> removeVowels('apple') "ppl" >>> removeVowels('Apple') "ppl" >>> removeVowels('Banana') 'Bnn' 

Código (Principiante):

 def removeVowels(word): vowels = ('a', 'e', 'i', 'o', 'u') for c in word: if c in vowels: res = word.replace(c,"") return res 

¿Cómo puedo usar mayúsculas y minúsculas?

Aquí hay una versión que usa una lista en lugar de un generador:

 def removeVowels(word): letters = [] # make an empty list to hold the non-vowels for char in word: # for each character in the word if char.lower() not in 'aeiou': # if the letter is not a vowel letters.append(char) # add it to the list of non-vowels return ''.join(letters) # join the list of non-vowels together into a string 

También puedes escribirlo como

 ''.join(char for char in word if char.lower() not in 'aeiou') 

Lo que hace lo mismo, excepto encontrar las no vocales una a la vez, ya que la join necesita para crear la nueva cadena, en lugar de agregarlas a una lista y luego unirlas al final.

Si desea acelerarlo, hacer que la cadena de valores de un set haga que buscar cada personaje sea más rápido y tener las letras mayúsculas también significa que no tiene que convertir cada carácter a minúscula.

 ''.join(char for char in word if char not in set('aeiouAEIOU')) 

Usando el método de bytes.translate () :

 def removeVowels(word, vowels=b'aeiouAEIOU'): return word.translate(None, vowels) 

Ejemplo:

 >>> removeVowels('apple') 'ppl' >>> removeVowels('Apple') 'ppl' >>> removeVowels('Banana') 'Bnn' 
 re.sub('[aeiou]', '', 'Banana', flags=re.I) 

La solución @katrielalex también se puede simplificar en una expresión generadora:

 def removeVowels(word): VOWELS = ('a', 'e', 'i', 'o', 'u') return ''.join(X for X in word if X.lower() not in VOWELS) 

Ya que todas las otras respuestas reescriben completamente el código, pensé que te gustaría uno con tu código, solo ligeramente modificado. Además, lo mantuve simple, ya que eres un principiante.

Una nota al margen: debido a que reasigna la res a la word en cada bucle for, solo obtendrá la última vocal reemplazada. En lugar de reemplazar las vocales directamente en la word

 def removeVowels(word): vowels = ('a', 'e', 'i', 'o', 'u') for c in word: if c.lower() in vowels: word = word.replace(c,"") return word 

Explicación: acabo de cambiar if c in vowels: a if c.lower() in vowels:

.lower() convierte una cadena a minúsculas. Así que convirtió cada letra a minúsculas, luego verificó la letra para ver si estaba en la tupla de vocales y luego la reemplazó si era.

Las otras respuestas son todas buenas, por lo que debe revisar los métodos que usan si aún no los conoce.

¡Espero que esto ayude!

Aquí tiene otra función simple y fácil de usar, sin necesidad de usar listas:

 def removeVowels(word): vowels = 'aeiouAEIOU' for vowel in vowels: word = word.replace(vowel, '') return word 
 def _filterVowels(word): for char in word: if char.lower() not in 'aeiou': yield char def removeVowels(word): return "".join(_filterVowels(word)) 

Qué tal esto:

 import re def removeVowels(word): return re.sub("[aeiouAEIOU]", "", word) 
 def removeVowels(word): vowels='aeiou' Vowels='AEIOU' newWord='' for letter in word: if letter in vowels or letter in Vowels: cap=letter.replace(letter,'') else: cap=letter newWord+=cap return newWord