在Python中找到元音的第一个出现

时间:2012-09-23 18:15:34

标签: python string

我有一个函数isvowel,返回TrueFalse,具体取决于字符ch是否为元音。

    def isvowel(ch):
          if "aeiou".count(ch) >= 1:
              return True
          else:
              return False

我想知道如何使用它来获取字符串中任何元音的第一次出现的索引。我希望能够在第一个元音之前取出字符并将它们添加到字符串的末尾。当然,我无法做s.find(isvowel),因为isvowel给出了一个布尔响应。我需要一种方法来查看每个字符,找到第一个元音,并给出该元音的索引。

我该怎么做呢?

6 个答案:

答案 0 :(得分:2)

你可以尝试这样的事情:

import re

def first_vowel(s):
    i = re.search("[aeiou]", s, re.IGNORECASE)
    return -1 if i == None else i.start()

s = "hello world"
print first_vowel(s)

或者,如果您不想使用正则表达式:

def first_vowel(s):
    for i in range(len(s)):
        if isvowel(s[i].lower()):
            return i
    return -1

s = "hello world"
print first_vowel(s)

答案 1 :(得分:1)

[isvowel(ch) for ch in string].index(True)

答案 2 :(得分:1)

(ch for ch in string if isvowel(ch)).next()

或只是索引(如提出的那样):

(index for ch, index in itertools.izip(string, itertools.count()) if isvowel(ch)).next()

这将创建一个迭代器并仅返回第一个元音元素。警告:没有元音的字符串会抛出StopIteration,建议处理它。

答案 3 :(得分:0)

这是我的看法:

>>> vowel_str = "aeiou"

>>> def isVowel(ch,string):
...     if ch in vowel_str and ch in string:
...             print string.index(ch)
...     else:
...             print "notfound"
... 
>>> isVowel("a","hello")
not found

>>> isVowel("e","hello")
1
>>> isVowel("l","hello")
not found

>>> isVowel("o","hello")
4

答案 4 :(得分:0)

对于生成器使用next非常有效,这意味着您不会遍历整个字符串(一旦找到字符串)。

first_vowel(word):
    "index of first vowel in word, if no vowels in word return None"
    return next( (i for i, ch in enumerate(word) if is_vowel(ch), None)
is_vowel(ch):
    return ch in 'aeiou'

答案 5 :(得分:0)

my_string = 'Bla bla'
vowels = 'aeyuioa'

def find(my_string):
    for i in range(len(my_string)):
        if my_string[i].lower() in vowels:
            return i
            break 

print(find(my_string))