Строка заменяет гласные в Python?
Ожидаемое:
>>> removeVowels('apple')
"ppl"
>>> removeVowels('Apple')
"ppl"
>>> removeVowels('Banana')
'Bnn'
Код (Начинающий):
def removeVowels(word):
vowels = ('a', 'e', 'i', 'o', 'u')
for c in word:
if c in vowels:
res = word.replace(c,"")
return res
Как мне прописные и строчные буквы?
9 ответов
Вот версия, использующая список вместо генератора:
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
Вы также можете написать это так же, как
''.join(char for char in word if char.lower() not in 'aeiou')
Который делает то же самое, кроме нахождения не-гласных по одному join
нужно, чтобы они создали новую строку, вместо того, чтобы добавлять их в список, а затем соединять их в конце.
Если вы хотите ускорить это, сделав строку значений set
ускоряет поиск каждого символа в них, а наличие букв в верхнем регистре также означает, что вам не нужно переводить каждый символ в нижний регистр.
''.join(char for char in word if char not in set('aeiouAEIOU'))
Использование метода bytes.translate():
def removeVowels(word, vowels=b'aeiouAEIOU'):
return word.translate(None, vowels)
Пример:
>>> removeVowels('apple')
'ppl'
>>> removeVowels('Apple')
'ppl'
>>> removeVowels('Banana')
'Bnn'
Решение @katrielalex также можно упростить до выражения генератора:
def removeVowels(word):
VOWELS = ('a', 'e', 'i', 'o', 'u')
return ''.join(X for X in word if X.lower() not in VOWELS)
Поскольку все остальные ответы полностью переписывают код, который, как я полагал, вам нужен, с кодом, только слегка измененным. Кроме того, я сохранил это простым, так как вы начинающий.
Примечание: потому что вы переназначаете res
в word
в каждом цикле for вы получите только последний гласный. Вместо этого замените гласные прямо в 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
Пояснение: я только что изменился if c in vowels:
в if c.lower() in vowels:
.lower()
преобразовать строку в нижний регистр Таким образом, он преобразовал каждую букву в нижний регистр, затем проверил букву, чтобы увидеть, есть ли она в кортеж гласных, а затем заменил ее, если она была.
Все остальные ответы хорошие, поэтому вы должны проверить методы, которые они используют, если вы еще их не знаете.
Надеюсь это поможет!
Здесь у вас есть еще одна простая и удобная функция, не нужно использовать списки:
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))
Как насчет этого:
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