1

文字が母音かどうかに応じて、またはisvowelを返す関数があります。TrueFalsech

    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
(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 に答える
1
[isvowel(ch) for ch in string].index(True)
于 2012-09-23T18:22:52.860 に答える
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
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 に答える
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 に答える