我想从python中的单词中删除元音,

时间:2018-12-17 15:28:53

标签: python string python-3.x

如果输入为'ameer bau',则输出应为'mr b',但我收到错误消息'index out of range',我的代码在下面

str=input()
new=list(str)

for i in range(len(new)):
    if new[i]=='a' or new[i]=='e' or new[i]=='i' or new[i]=='o' or new[i]=='u':
        new.pop(i)

str1="".join(new)
print(str1)

5 个答案:

答案 0 :(得分:3)

在您的for循环中,您循环访问new的索引,但是在循环的主体中调用了new.pop(i)。这会改变列表的大小,最终导致IndexError

相反,请使用列表理解(如果需要列表)或生成器表达式:

string = input()
vowels = {'a', 'e', 'i', 'o', 'u'}
new_string = ''.join(x for x in string if x not in vowels)
print(new_string)

答案 1 :(得分:1)

string = 'ameer bau'
new_string = ''

for letter in string:
    if letter not in 'aeiou':
        new_string += letter

print (new_string) 
# mr b

要进行更改以使其完全适合您的问题:

string = input('Enter your string here: ')
new_string = ''

for letter in string:
    if letter not in 'aeiou':
        new_string += letter

print (new_string) 
# mr b

此外,str是保留关键字,您不应将其用作变量名

答案 2 :(得分:0)

另一种选择是build a translation table,然后使用str.translate丢弃元音:

remove_vowels = str.maketrans('', '', 'aeiou')

'example text'.translate(remove_vowels)
# 'xmpl txt'

答案 3 :(得分:0)

欢迎您!

每次从new弹出项目时,列表会变短,从而导致索引错误。您可以改为:

编辑:就像@Rarblack指出的那样,这不适用于连续多于一个元音的字符串。抱歉。

for i in new:
    if i in ('a', 'e', 'i', 'o', 'u'):
        new.remove(i)

str1 = ''.join(new)

答案 4 :(得分:0)

您可以使用str.translate或正则表达式,即

new.translate(str.maketrans('','','aeiou'))

其中str是字符串关键字,而不是您的变量名,或者您可以这样做

import re
new = re.sub('[aeiou]','',input())