我正在尝试用相同的索引替换给定字符串的元音。我正在尝试使用.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'
答案 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)