在Python里,利用列表推导式可以非常简洁地去掉字符串中每个单词里的元音字母。核心思路是先按空格切分单词,再对每个单词的字符做过滤,最后重新组合。

基本实现方式
我们可以定义一个元音集合,然后借助两层列表推导式:外层遍历单词,内层遍历字符并排除元音。
text = "hello world this is a test"
vowels = set("aeiouAEIOU")
# 外层推导式遍历单词,内层推导式保留非元音字符
result = " ".join(
"".join(ch for ch in word if ch not in vowels)
for word in text.split()
)
print(result)
# 输出: hll wrld ths s tst
封装成函数
把逻辑封装起来更方便复用,也能处理空字符串或连续空格的情况。
def remove_vowels_from_words(s):
vowels = set("aeiouAEIOU")
return " ".join(
"".join(ch for ch in word if ch not in vowels)
for word in s.split()
)
print(remove_vowels_from_words("Open AI makes tools"))
# 输出: pn mks tls
为什么用集合存元音
使用set做成员判断的时间复杂度是O(1),比在字符串里用in逐个比对更快,尤其在处理长文本时更明显。
注意事项
- 原字符串中的多余空格会在
split()后被规范化成一个空格。 - 数字和标点符号会原样保留,因为只过滤了元音字母。
- 如果需要保留大小写规则,当前写法已经支持,非元音字母大小写不变。
小结
通过列表推导式,我们用极少的代码完成了按单词去除元音的需求。这种方式可读性好,也很容易改成去除其他字符或处理其他分隔符。