我试图找到第一个来自这个词的元音。输出应与find()函数的输出相同。
所以,例如,
来自" python",输出应为" 4" (" python" .find(" o")是4)
来自" stock",输出应为" 2"
来自"溢出",输出应为" 0"
来自"样式",输出应为" 4" ("样式" .find(" i")是4)
实际上我真正要做的就是删除首先出现的元音,
while 0 != 1:
if word[x] in 'aeiou':
word = word[x]+word[x+2:]
x = x+1
else: x = x+1
这是我到目前为止所尝试的,但它导致" IndexError:字符串索引超出范围"
答案 0 :(得分:2)
这是一个使用正则表达式的解决方案:
import re
VOWEL_REGEX = re.compile(r'[aeiou]')
def first_vowel_index(word):
match = VOWEL_REGEX.search(word)
if not match:
return -1
return match.start()
根据您的示例进行测试:
>>> first_vowel_index('python')
4
>>> first_vowel_index('stock')
2
>>> first_vowel_index('overflow')
0
>>> first_vowel_index('styling')
4
答案 1 :(得分:2)
以下是使用您可能熟悉的简单For loop和enumerate的解决方案:
def position_of_first_vowel(word):
for index, char in enumerate(word):
if char in 'aeiou':
return index
return -1
for case in ["python","stock", "overflow", "styling", "zxc"]:
print("%s: %d" % (case, position_of_first_vowel(case)))
<强>输出:强>
python: 4
stock: 2
overflow: 0
styling: 4
zxc: -1
N.B。 zxc
的额外测试用例是为了显示-1
如果单词中没有元音
答案 2 :(得分:2)
这应该是一个简单的一行next
和enumerate
。
def foo(string):
next((i for i, c in enumerate(string) if c in set('aeiou')), -1)
inputs = ["python", "stock", "overflow", "styling", "pythn"] # note the last string
print([foo(i) for i in inputs])
[4, 2, 0, 4, -1]
答案 3 :(得分:0)
如果您只是寻找第一个外观,可以使用.index()方法作为字符串。
string = "Foo Bar"
vocals = {'a','e','i','o','u'}
def first_index(string, chars):
try:
return min(string.index(vocal) for vocal in chars if vocal in string)
except ValueError:
return -1
print(first_index(string, vocals))
返回:
1