首页 > 解决方案 > 切片列表以使用 Python 删除某些对象

问题描述

我正在尝试删除 word 中的元音对象(word 是构成 userWord 的字母列表)。如果 userWord 以辅音开头,代码可以正常工作(删除所有元音),但如果 useWord 以元音开头,它不会删除第一个元音,而我想删除 useWord 中的所有元音。我跳过了什么吗?抱歉,我是初学者。我正在使用 Python 3.8.5

def voweleater(userWord):
    word = list(userWord)
    vowels = ['a', 'e', 'i', 'o', 'u']
    for letter in word:
        for i in vowels:
            if i in word:
                word.remove(i)
        print(letter)
voweleater("abstemious")

Code output:

a
s
t
m
s

标签: pythonlistfor-loop

解决方案


正则表达式方法(更干净,可能更好地优化)

from re import sub

def remove_vowels(word):
    return sub(r'[aeiouAEIOU]', "", word)

print(remove_vowels("abstemious")) # Returns "bstms"

正则表达式[aeiouAEIOU]匹配任何没有重音的元音,然后我们用re.sub空格替换找到的匹配项。

数组拆分方法(更冗长,可能更慢)

def remove_vowels(word):
    characters = list(word)
    vowels = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']

    for index, letter in reversed(list(enumerate(characters))):
        if letter in vowels:
            characters.pop(index)
    
    return "".join(characters)

print(remove_vowels("abstemious")) # Returns "bstms"

这样,您将反向遍历您的字符(因此您将始终从末尾删除值,防止您意外尝试读取不再存在的索引)。如果当前字母是元音,则删除它。然后你返回一个连接剩余字符的字符串。


推荐阅读