从字符串中删除元音

STN*_*NDR 2 python string replace

我想从所输入的任何字符串中删除所有元音.我正在尝试使代码尽可能简单.

感谢您的帮助.

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

cs9*_*s95 8

所以你在每个角色上调用条带......然后是什么?您不更新字符串,因为字符串是不可变的并且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])
Run Code Online (Sandbox Code Playgroud)

小记:如果你的字符串包含混合大小写,你可能想要

  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])
    
    Run Code Online (Sandbox Code Playgroud)

你可以得到甚至更好的str.translate(这个工程上的python-3.X):

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

  • @StephenRauch但它更快_with_它...让我找到你的链接.编辑:这里:/sf/answers/634271711/ (8认同)
  • @StephenRauch这是核心开发人员Raymond Hettinger对gen exp vs list comp的`.join`所说的话:/sf/answers/634271711/ (2认同)