是否有一种方法可以将弦中存在的所有元音移到开头

时间:2019-03-23 17:07:05

标签: python python-3.x

编写一个程序,该程序接收一个字符串,并将其中存在的所有元音移到开头。

我尝试将元音一个一地排序并在旅途中将其取出并分别保存两个弦,然后最后我将其加入

s = "You love Python!"
vowels = "aeiou"
s1= ""
for l in range(0,len(s)):
    if s[l] in vowels:
        s1 = s1+s[l]
        s2 = s.replace(s[l],"")

print(s1+s2)

输出:

ouoeoYu lve Pythn!

但是在输出中,第二个单词“ e”未排序。有什么错误吗?

1 个答案:

答案 0 :(得分:1)

问题:

您的代码无法正常工作的原因是,您有时使用s,有时甚至使用s2s.replace(s[l],"")s无任何作用-因此,每次使用s2时,s都会替换成一个元音,而其他元音将被视为{{ 1}}。

最后一个被替换的元音为s-因此o变为:s2-Yu lve Pythn!u仍在其中。

您的固定代码:

e

优化:

请勿按索引进行迭代,而应直接对字符串的字符进行迭代。如果从字符串中收集内容,请避免产生更多的字符串,而应使用列表。字符串是不可变的,每次您修改字符串都是新的。

次优: 您可以使用列表推导将字符分成两个列表,将两个列表组合在一起,然后将它们重新连接成字符串:

s = "You love Python!"
vowels = "aeiou"
s1 = ""
for c in  s:
    if c in vowels:
        s1 = s1+c                  # produces new string every time
        s = s.replace(c,"")        # produces new string every time

print(s1+s) # ouoeoY lv Pythn!

输出:

s = "You love Python!"

s1 = [x for x in s if x.lower() in "aeiou"] # gets vowels, order and capitalization is kept
s2 = [x for x in s if x.lower() not in "aeiou"]  # gets all other characters

s3 = ''.join(s1+s2)  # adds lists back together and makes it a continiois string

print(s1)
print(s2)
print(s3)

缺点:您必须遍历整个字符串两次。一个简单的for循环可以一次完成:

['o', 'u', 'o', 'e', 'o']
['Y', ' ', 'l', 'v', ' ', 'P', 'y', 't', 'h', 'n', '!']
ouoeoY lv Pythn!

输出相同。


Doku: