1

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

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

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

我该怎么做呢?

4

6 回答 6

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)
于 2012-09-23T18:25:00.323 回答
1
[isvowel(ch) for ch in string].index(True)
于 2012-09-23T18:22:52.860 回答
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,建议处理。

于 2012-09-23T18:40:05.183 回答
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
于 2012-09-23T18:24:56.120 回答
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'
于 2012-09-23T19:01:01.583 回答
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))
于 2016-09-06T07:04:20.970 回答