通过用String中的index替换元音来删除元音

时间:2019-01-26 02:12:33

标签: python

我正在尝试用相同的索引替换给定字符串的元音。我正在尝试使用.replace()和.index(),但是它不起作用。 我有这样的东西:

def vowels(w):
vowel = 'aeiou'
for i in w:
    if i in vowel:
        a = w.replace(i, w.index(str(w.find('aeiou'))))
    return a

想法是这样的:

input ='大家好'

output ='H1 3v5ry8n10'

3 个答案:

答案 0 :(得分:2)

在这种情况下,使用.replace()并不是一个好主意。通常,.replace()将对字符串中的所有元音进行运算,但是在这种情况下,您需要使用非常特定的值替换每个元音。最好使用join进行生成器理解:

vowels = set('aeiou')
s = "Hi Everyone"

replaced = ''.join(str(i) if c.lower() in vowels else c for i, c in enumerate(s))
print(replaced)

输出:

H1 3v5ry8n10

答案 1 :(得分:0)

replace接受第三个参数,告诉它要替换多少个字符。为了您的目的,您需要每次更换一次。

index将为您提供字符的位置,而str将其为字符串。

使用lower确保所有大小写均匹配。

替换w中使用的字符以包括重复项。确保它是列表,并且替换不是单个字符,因此它适用于所有字符串。

def vowels(w):
    vowel = 'aeiou'
    a = w
    w = list(w)
    for i in w:
        if i.lower() in vowel:
            a = a.replace(i, str(w.index(i)), 1)
            w[w.index(i)] = 0
    return a

在:Hi Everyone
退出:H1 3v5ry8n10

答案 2 :(得分:0)

请记住@Craig Meier的评论,这是在迭代时跟踪元素位置的最简单方法,是使用enumerate。这使得find操作变得不必要,并且代码更简单。

最Python化的方式当然是@Primusa提出的,但是我认为展示更多逐步的方法很有价值。

def vowels(w):
    vowel = 'aeiou'
    for pos, char in enumerate(w):  # extract a character and remember its position
        if char.lower() in vowel:   # check if it belongs to the check set
            w = w.replace(char, str(pos), 1)  # replace just the first instance
    return w

inp = 'Hi Everyone'
output = vowels(inp)
print(output)