提取字符串中第一个元音的索引

时间:2017-09-21 07:27:56

标签: python string

我试图找到第一个来自这个词的元音。输出应与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:字符串索引超出范围"

4 个答案:

答案 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 loopenumerate的解决方案:

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)

这应该是一个简单的一行nextenumerate

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