首页 > 解决方案 > 从字符串中删除元音

问题描述

我想从要输入的任何字符串中删除所有元音。我试图使代码尽可能简单。

感谢您的帮助。

def anti_vowel(text):
    for i in text:
       i.strip(['i','o','a','u','e'])
       return i

标签: pythonstringreplace

解决方案


所以你在每个字符上调用 strip ......然后呢?您不更新字符串,因为字符串是不可变的并且i.strip不是就地操作。

对您的解决方案的一个天真的改进会在列表理解中过滤字符,然后join对结果执行以下操作:

vowels = {'i','o','a','u','e'}
def anti_vowel(text):
    return ''.join([c for c in text if c not in vowels])

一个小提示:如果您的字符串包含混合大小写,您可能想要

  1. 小写text,或
  2. 扩充vowels以包含大写元音:vowels = set('aeiouAEIOU'), 或
  3. 使用str.casefold(根据@Adam Smith 的评论)——vowels在这种情况下不再需要增强:

    return ''.join([c for c in text if c.casefold() not in vowels])
    

你可以变得更好str.translate这适用于python-3.x):

mapping = str.maketrans(dict.fromkeys(vowels, '')) # create a global mapping once
def anti_vowel(text):
    return text.translate(mapping))

推荐阅读