2017-09-21 23 views
0

我試圖找到任何第一個來自單詞的元音。輸出應該與find()函數的輸出相同。提取字符串中第一個元音的索引

因此,舉例來說,

從 「蟒」,輸出應爲 「4」( 「蟒」 .find( 「O」)是4)

從 「股票」,輸出應該是「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

那你試試這麼遠嗎? – Adelin

+0

任何解決方案都從編寫一些代碼開始。 – Julien

+0

你試過簡單的''''''循環嗎? – Siddharth

回答

2

下面是一個使用簡單For loop瓦特的解決方案HICH你可能熟悉和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 

注:zxc額外的測試案例是有顯示的-1返回如果元音不字

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 
+0

是的,這是我沒有發佈的。 –

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] 
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 
相關問題