python - 切片列表以使用 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
解决方案
正则表达式方法(更干净,可能更好地优化)
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"
这样,您将反向遍历您的字符(因此您将始终从末尾删除值,防止您意外尝试读取不再存在的索引)。如果当前字母是元音,则删除它。然后你返回一个连接剩余字符的字符串。
推荐阅读
- jquery - jQuery特定位置检测滚动事件问题
- php - 代码保持打印相同的单词两次
- oracle11g - 在 oracle 中执行函数时跳过参数
- amazon-web-services - GCP 中 AWS 安全组的替代方案?
- bluetooth - bluetoothAdapter.startDiscovery() 总是返回 False
- paypal - PayPal 智能按钮是否需要意图?
- sql - VB SQL DELETE 语句不起作用 - 完全没有错误
- excel - 如何在谷歌表格上的 2 个符号之间提取一个数字
- flutter - Android 资源链接失败 Flutter
- layout - AgoraKit - 如何创建网格样式的视频会话布局?