我正在尝试查找字符串中的所有元音以替换它们。
以下是我一直在使用的内容:
word = "abcde"
vowels = "aeiou"
v = list(vowels)
hey = False
for i in range(len(word)):
if word[i] == v:
hey = True
print hey
我试图用符号“$”的字符串替换所有这些位置,但我无法弄清楚如何正确地进行线性搜索。
答案 0 :(得分:3)
假设这是某种赋值/类,这是一个简单的例子。您可以逐个字符地迭代,这样就会遍历元音集中的每个字母,并用$
字符替换单词中的每个实例:
In [33]: s = 'abcde'
In [34]: for c in 'aeiou':
....: s = s.replace(c, '$')
....:
....:
In [35]: s
Out[35]: '$bcd$'
保持简单,反过来做:
In [6]: s = 'abcde'
In [7]: replace = ''
In [8]: for c in s:
...: if c not in 'aeiou':
...: replace += c
...:
...:
In [9]: for c in replace:
...: s = s.replace(c, '$')
...:
...:
In [10]: s
Out[10]: 'a$$$e'
这不会涉及许多其他非常酷的函数,可以在一行/两行中处理这个函数,但希望它可以作为构建块:)
答案 1 :(得分:3)
"".join(("$" if char in vowels else char) for char in string)
答案 2 :(得分:3)
使用正则表达式可能是最简单的:
(?i)
表示不区分大小写的比较
[aeiou]
表示a,e,i,o或u
其余的相当明显
import re
s = 'alpha beta charlie delta echo foxtrot golf hotel'
print re.sub('(?i)[aeiou]', '$', s)
# $lph$ b$t$ ch$rl$$ d$lt$ $ch$ f$xtr$t g$lf h$t$l
或者str.translate
:
from string import maketrans
to_dollar = 'aeiouAEIOU'
trans = maketrans(to_dollar, '$' * len(to_dollar))
print s.translate(trans)
# $lph$ b$t$ ch$rl$$ d$lt$ $ch$ f$xtr$t g$lf h$t$l
或者使用dict
:
lookup = dict.fromkeys('aeiouAEIOU', '$')
print ''.join(lookup.get(c, c) for c in s)
# $lph$ b$t$ ch$rl$$ d$lt$ $ch$ f$xtr$t g$lf h$t$l
答案 3 :(得分:1)
您可以使用一组来快速确定您正在迭代的字符是否为元音。设置对象(通常)具有恒定的查找时间,而不是像列表一样的线性查找时间。
vowels = set(vowels)
''.join('$' if ch in vowels else ch for ch in string)
答案 4 :(得分:0)
word = "a quick brown fox"
vowels = list("aeiou")
hey = False
for w in word:
hey = hey or w in vowels
print hey