2017-09-25 11 views
2

最後の母音の文字列を検索し、その最後の母音の後に一意の子音を格納する適切な方法を見つけることができないようです。私はこれまでこれのように設定しています。何の母音が存在しない場合は、文字列全体が文字列の最後の母音を見つける

from itertools import takewhile 

out = ''.join(takewhile(lambda x: x not in set('aeiou'), string[::-1]))[::-1] 
print(out) 
'ng' 

word = input('Input a word: ') 
wordlow = word.lower() 
VOWELS = 'aeiou' 
last_vowel_index = 0 

for i, ch in enumerate(wordlow): 
    if ch == VOWELS: 
     last_vowel_index += i 

print(wordlow[last_vowel_index + 1:]) 
+0

なぜあなたは 'last_vowel_index'に_adding_iしていますか? – khelwood

+0

ifループで、または印刷するときに話していますか?または地獄、どちらも? – manoman181

+0

'last_vowel_index + = i' < - これです。私はこれの理由を考えることはできません。 – khelwood

答えて

2

あなたは、文字列を逆にし、(反転後の今最初の)「最後」の母音まで、すべてを取るためにitertools.takewhileを使用することができます戻ってきた。注意すべきもう一つは、str.lowerコールを使用して入力文字列を小文字に変換する必要があります。そうしないと、大文字の母音は数えられません。


あなたが(任意の繰り返しなし)のみのユニークな子音をしたい場合は、さらにステップが必要とされている:

ここ
from collections import OrderedDict 
out = ''.join(OrderedDict.fromkeys(out).keys()) 

キーがなければなりません、以来、OrderedDictは、重複を排除しながら、私たちが注文を保つことができますどの辞書でも一意です。

また、あなたはだけは一度現れる子音、使用したい場合:あなたは、単にそのための関数を書くことができます

from collections import Counter 

c = Counter(out) 
out = ''.join(x for x in out if c[x] == 1) 
+0

@schwobasegglうーん、それを見ていない。今は大丈夫だと思います。 –

+1

OPは「ユニークな子音」の意味では不明です。私は最後の母音の後に1回だけ出現する子音を意味するのですか、単に重複を取り除きたいのですか? @DavidJenkins編集済み –

+0

これらのニックは簡単に対処できます。 –

0

:たとえば

def func(astr): 
    vowels = set('aeiouAEIOU') 

    # Container for all unique not-vowels after the last vowel 
    unique_notvowels = set() 

    # iterate over reversed string that way you don't need to reset the index 
    # every time a vowel is encountered. 
    for idx, item in enumerate(astr[::-1], 1): 
     if item in vowels: 
      # return the vowel, the index of the vowel and the container 
      return astr[-idx], len(astr)-idx, unique_notvowels 
     unique_notvowels.add(item) 

    # In case no vowel is found this will raise an Exception. You might want/need 
    # a different behavior... 
    raise ValueError('no vowels found') 

>>> func('asjhdskfdsbfkdes') 
('e', 14, {'s'}) 

>>> func('asjhdskfdsbfkds') 
('a', 0, {'b', 'd', 'f', 'h', 'j', 'k', 's'}) 

最後の母音、母音aのインデックス最後の母音の後にすべてのユニークな母音を見つけなさい。

母音を発注する必要がある場合は、list(はるかに遅くなる可能性があります)またはcollections.OrderedDict(高価ですがリストより高速です)など、セットの代わりに順序付きコンテナを使用する必要があります。

-1

last_vowelは単語

last_indexの最後の母音を入力して、あなたに

をこの母音の最後のインデックスを与える戻りますPythonの2.7

input = raw_input('Input a word: ').lower() 
last_vowel = [a for a in input if a in "aeiou"][-1] 
last_index = input.rfind(last_vowel) 
print(last_vowel) 
print(last_index) 

のPython 3.xの

input = input('Input a word: ').lower() 
last_vowel = [a for a in input if a in "aeiou"][-1] 
last_index = input.rfind(last_vowel) 
print(last_vowel) 
print(last_index) 
4

私はCOLDSPEED's approac

import re 
s = 'sjdhgdfgukgdk' 
re.search(r'([^AEIOUaeiou]*)$', s).group(1) 
# 'kgdk' 

# '[^AEIOUaeiou]' matches a non-vowel (^ being the negation) 
# 'X*' matches 0 or more X 
# '$' matches the end of the string 
#() marks a group, group(1) returns the first such group 

docs on python regular expression syntaxを参照してください:hは、完全を期すために、私は正規表現ベースのソリューションを提案します。 )ユニークさの部分にはさらに処理が必要です。)

+0

いいです。正規表現とそれがどのように動作するかについての簡単な説明を追加する必要があります。 –

関連する問題