我从字符串中删除元音的代码表现得很奇怪

时间:2018-03-18 02:23:52

标签: python python-3.x python-2.7

所以我编写了这段代码来删除给定的任何字符串中的元音。 它应该工作正常。实际上它确实如此。只是不是所有的字符串 这很奇怪,为什么它会对某些字符串起作用而不适用于其他字符串

这是代码:

vowels = ["a", "e", "i", "o", "u"]
def anti_vowel(text):
  text1 = list(text)
  print text1
  for i in text1:
    if i.lower() in vowels:
      text1.remove(i)

  text2 = "".join(text1)
  return text2

以下是我提出的测试:

print anti_vowel("my name is Omar")
print anti_vowel("Hey look Words!")
print anti_vowel("Hey look more Words to look for!")

我尝试在代码中间放置print语句来测试它,我发现了一些奇怪的东西。 for循环迭代大约3或4次以移除一个元音。 我似乎不知道为什么

5 个答案:

答案 0 :(得分:2)

这种奇怪的情况发生在2个元音紧挨着的时候。基本上,你是循环单词中的每个字母,但当你删除字母(如果它是一个元音),然后你缩短单词的长度,因此下一个字母将跳过真实< / em>下一封信。当被跳过的字母是元音时,这是一个问题,但是当它是辅音时则不是。

那么我们如何解决这个问题呢?好吧,我们不是修改我们循环的东西,而是创建一个新的字符串并对其进行修改。所以:

text2 = ""    
for letter in text1:
    if letter not in vowels:
        text2 += letter
return text2

这也可以通过列表理解来实现:

return "".join ([letter for letter in text1 if letter not in vowels])

答案 1 :(得分:0)

您不必将字符串转换为列表。请参阅此答案:

Correct code to remove the vowels from a string in Python

答案 2 :(得分:0)

因为for语句检查列表中的每个字母,即使它删除了该元音。这是一个快速示例,它不会迭代3-4次以删除一个元音:

vowels = ["a", "e", "i", "o", "u"]
def anti_vowel(text):
  text1 = list(text.lower())
  text1 = [x for x in text1 if x not in vowels]
  text2 = "".join(text1)
  return (text2)

print anti_vowel("my name is Omar")
print anti_vowel("Hey look Words!")
print anti_vowel("Hey look more Words to look for!")

答案 3 :(得分:0)

我正在使用Python 2.7。我稍微修改了你的代码,

vowels = 'aeiou'
def anti_vowel(text):
    text1 = list(text)
    print text1
    for i in text:
        if i.lower() in vowels:
            text1.remove(i)

    text2 = "".join(text1)
    return text2

print anti_vowel("my name is Omar")
#['m', 'y', ' ', 'n', 'a', 'm', 'e', ' ', 'i', 's', ' ', 'O', 'm', 'a', 'r']
#my nm s mr

print anti_vowel("Hey look Words!")
#['H', 'e', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']
#Hy lk Wrds!

print anti_vowel("Hey look more Words to look for!")
#['H', 'e', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'm', 'o', 'r', 'e', ' ', 'W', 'o', 'r', 'd', 's', ' ', 't', 'o', ' ', 'l', 'o', 'o', 'k', ' ', 'f', 'o', 'r', '!']
#Hy lk mr Wrds t lk fr!

我不能复制你的问题。 for循环扫描输入字符串一次(一个字符乘以一个字符)并删除遇到的任何元音。也许您可以发布输出,以便我们进行调试。

答案 4 :(得分:0)

这可以在没有#!python2 def anti_vowel(text): vowels = ["a", "e", "i", "o", "u"] s1 = '' for i in text: if i.lower() in vowels: pass else: s1 += i return s1 print anti_vowel("my name is Omar") print anti_vowel("Hey look Words!") print anti_vowel("Hey look more Words to look for!")

的情况下完成
L = [{'G'}, {'D'}, {'B','C'}]
word='C'

print([True if list(filter(lambda x:word in x,L)) else False])