我试图删除辅音后的元音,但是代码删除了所有元音。
我不明白为什么会删除ng build --configuration=development
。
"aaa"
上面的代码应该给出def kk(phrase):
v = ['a', 'e', 'i', 'o', 'u', 'y']
for i in phrase:
if i not in v and phrase[phrase.index(i)+1] in v:
phrase=phrase.replace(phrase[phrase.index(i)+1],"")
return phrase
print (kk("aaa bo cy da eee fe"))
,但是结果是"aaa b c d eee f"
。
答案 0 :(得分:1)
方法1:
def kk(phrase):
v = set('aeiuo') # for O(1) lookups
deleteme = set()
for i,char in enumerate(phrase[:-1]):
if char not in v and phrase[i+1] in v:
deleteme.add(i)
return ''.join([char for i,char in enumerate(phrase) if i not in deleteme])
方法2:
def kk(phrase):
v = set('aeiou')
i = 0
while i < len(phrase)-1:
if phrase[i] not in v and phrase[i+1] in v:
phrase = phrase[:i+1] + phrase[i+2:]
i += 1
return phrase
答案 1 :(得分:1)
您的主要问题是replace
替换了所传递子字符串的所有出现,因此,例如,每遇到'a'
时,您都将其删除:>
第二个问题,即使您解决了replace
问题,也是因为您正在使用index
,它返回了找到的第一个索引。同样,例如,当到达字符串中的'da'
部分时,为'a'
返回的索引实际上将为0
。
要克服这个问题,您首先要遍历索引,为结果创建一个新变量,然后使用切片。像这样:
def kk(phrase):
v = ['a', 'e', 'i', 'o', 'u', 'y']
res = ""
last = 0
for i in range(len(phrase)-1):
if phrase[i] not in v and phrase[i+1] in v:
res += phrase[last:i+1]
last = i+2
res += phrase[last:]
return res
print (kk("aaa bo cy da eee fe"))
这给出了:
aaa b c d ee f
请注意,由于空间原因,还删除了一个e
,这很容易处理
答案 2 :(得分:1)
对于此任务,正则表达式是更好的选择:
import re
s = "aaa bo cy da eee fe"
result = re.sub(r"(?<=[^aeiouy ])[aeiouy]", "", s, flags=re.I)
此解决方案假定输入仅包含字母和空格。如果没有,[^aeiouy ]
需要替换为所有辅音的明确列表。
答案 3 :(得分:0)
使用itertools.groupby
和itertools.chain
的一种解决方案:
from itertools import groupby, chain
def kk(phrase):
s = set('aeiouy')
for v, g in groupby(phrase, lambda c: c == ' '):
if not v:
l = [(vv, [*gg]) for (vv, gg) in groupby(g, lambda c: c in s)]
yield from chain.from_iterable(g for _, g in l[:1])
yield from chain.from_iterable(g for v, g in l[1:] if v is False)
else:
yield from g
print(''.join(kk("aaa bo cy da eee fe")))
打印:
aaa b c d eee f
更多测试用例:
print(''.join(kk("aaaxaaa")))
print(''.join(kk("aaaxaaax")))
print(''.join(kk("a aax")))
打印:
aaax
aaaxx
a aax
答案 4 :(得分:-1)
好的,所以为什么不起作用是因为index
函数与replace
一起使用。 index
函数将返回字符串首次出现的索引,这就是在上述示例中它返回0而不是在a
之后返回b
的索引的原因。
一种解决方法:
def kk(phrase):
v = ['a', 'e', 'i', 'o', 'u']
for index, i in enumerate(phrase):
if i not in v and phrase[phrase.index(i)+1] in v:
phrase = phrase.replace(phrase[index], "")
return phrase