使用Python中的for循环更改数组的元素

时间:2012-05-11 16:13:51

标签: python string list for-loop

我正在尝试自学Python,并且正在做一些琐碎的任务。在那一刻我正在使用列表和字符串。我知道字符串是不可变的,所以我将字符串转换为列表,并希望循环遍历列表以将任何元音更改为$符号。问题是$符号不归因于元音。这是我的代码:

aString = raw_input("Please enter a sentence: ")

aString = list(aString)

for i in xrange(len(aString)):
    if i=='a' or \
       i=='e' or \
       i=='i' or \
       i=='o' or \
       i=='u':
        i.newattribute = '$'

print aString

5 个答案:

答案 0 :(得分:4)

我知道你这样做是为了学习这门语言,但你应该知道你可以简单地用方法sub代替正则表达式:

import re
re.sub('[aeiou]', '$', aString)

答案 1 :(得分:2)

您想要执行以下操作:

for i in xrange(len(aString)):
    if aString[i]=='a' or \
       aString[i]=='e' or \
       aString[i]=='i' or \
       aString[i]=='o' or \
       aString[i]=='u':
          aString[i] = '$'

但是使用replace方法可能会更容易。

replaceList = ['a', 'e', 'i', 'o', 'u']
aString = raw_input("Please enter a sentence: ")
for letter in replaceList:
    aString.replace(letter)
print aString

答案 2 :(得分:2)

strs="abcduitryd"
print("".join(('$' if x in 'aeiou' else x for x in strs)))

$bcd$$tryd

strs="abcduitryd"
lis=list(strs)
for i,x in enumerate(lis):
    if x in 'aeiou':
        lis[i]='$'
strs="".join(lis)
print(strs)

$bcd$$tryd

或:

strs="abcduitryd"
for i,x in enumerate(strs):
    if x in 'aeiou':
        strs=strs.replace(strs[i],'$')
print(strs)

$bcd$$tryd

答案 3 :(得分:1)

“Pythonic”方式是对字符串使用translate方法 例如:

import string
mystr="hello world"
vowels="aeiou"
token="$"*len(vowels)
tab=string.maketrans(vowels,token)
mystr.translate(tab)
'h$ll$ w$rld'

答案 4 :(得分:1)

如果您正在学习python,可以使用的一个很酷的功能是列表理解。你可以这样做:

>>> str = "hello world"
>>> l = ["$" if ch in "aeiou" else ch for ch in str]
>>> str = "".join(l)
>>> str
'h$ll$ w$rld'

第二行构建一个列表,遍历每个字符并在“aeiou”ch中使用“$”,否则为ch1。然后,您只需加入列表即可获得新字符串。它正在完成您正在尝试做的事情,将字符串转换为列表,并在此过程中将元音转换为'$'。

这当然不是最有效的方法。最好的方法是使用像其他人提到的那种用于此类事情的库。