我正在尝试自学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
答案 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。然后,您只需加入列表即可获得新字符串。它正在完成您正在尝试做的事情,将字符串转换为列表,并在此过程中将元音转换为'$'。
这当然不是最有效的方法。最好的方法是使用像其他人提到的那种用于此类事情的库。