1

我试图在一个字符串中找到所有元音来替换它们。

这是我一直在使用的:

word = "abcde"
vowels = "aeiou"
v = list(vowels)
hey = False
for i in range(len(word)):
    if word[i] == v:
        hey = True
print hey

我试图用符号“$”的字符串替换所有这些位置,但我不知道如何正确地进行线性搜索。

4

5 回答 5

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
于 2012-11-01T22:30:12.313 回答
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'

这并没有涉及许多其他非常酷的功能,它们可以在一/两行中处理这个问题,但希望将作为一个构建块:)

于 2012-11-01T22:29:19.960 回答
3
"".join(("$" if char in vowels else char) for char in string)
于 2012-11-01T22:29:26.690 回答
1

您可以使用集合来快速确定您正在迭代的字符是否是元音。设置对象(通常)具有恒定的查找时间,而不是像列表那样的线性查找时间。

vowels = set(vowels)
''.join('$' if ch in vowels else ch for ch in string)
于 2012-11-01T23:41:28.053 回答
0
word = "a quick brown fox"
vowels = list("aeiou")
hey = False
for w in word:
    hey = hey or w in vowels

print hey
于 2012-11-01T22:33:20.010 回答