我需要一个函数来反转文本字符串中的元音。我发现如果我使用text [item] .upper(),它会在一个单独的空间中进行更改,但不会影响原始列表。
“ Ello world”之类的字符串应类似于“ Ollo werld”,但问题是我的函数将原始字符串返回为“ ollo wErld”。
答案 0 :(得分:3)
您可以简单地将字母替换为大写字母,如下所示:
text[x] = text[x].upper()
编辑:我不知道为什么投票失败,但是当按照建议的方式用.lower()和.upper()函数调用替换行时,确实会得到预期的结果。 / p>
答案 1 :(得分:1)
def reversevowel(text):
cap_indexes = [a for a, b in enumerate(text) if b.isupper()]
text = list(text.lower())
vowels = ('aeiouAEIOU')
x = 0
y = len(text) - 1
while x < y:
while (text[x] not in vowels and x < min(len(text) - 1, y)):
x += 1
while (text[y] not in vowels and y > max(0, x)):
y -= 1
text[x], text[y] = text[y], text[x]
x += 1
y -= 1
for n in cap_indexes:
text[n] = text[n].upper()
return ''.join(text)
答案 2 :(得分:-1)
def reversevowel(text):
vowels = 'aeiouAEIOU'
text_list = list(text)
char_position = []
char_uppercase = []
char_list = []
# Iterate through characters in text
for i, c in enumerate(text_list):
if c in vowels:
char_position.append(i) # Add vowel position to list
char_uppercase.append(c.isupper()) # Add uppercase boolean to list
char_list.insert(0, c) # Use as stack. Insert character
zipped_list = list(zip(char_position, char_list, char_uppercase))
for letter in zipped_list:
position, character, uppercase = letter
text_list[position] = str(character).upper() if uppercase else str(character).lower()
return ''.join(text_list)
编辑:此函数在避免使用嵌套循环的同时返回所需的结果。