2016-05-15 6 views
-3

リストがあり、リストの各要素の最初と最後の文字に母音がある場合、私はいくつかの課題を持っていますそれらの母音を文字列で取得します。ですから、例えば:リスト内の要素から手紙を受け取る方法

vowels = "aeiou" 
new_list = [] 
for words in a_list: 
    a_list = [words.lower() for words in a_list] 
for letters in vowels: 
    if a_list[0] == vowels or a_list[-1] == vowels: 
     new_list += a_list[vowels] 
return new_list 

しかし、私はエラー

[] 
[] 
Traceback (most recent call last): 
File "C:\Users\Miraj\Desktop\Q3.py", line 27, in <module> 
test_get_first_last_vowels() 
File "C:\Users\Miraj\Desktop\Q3.py", line 24, in test_get_first_last_vowels 
print(get_first_last_vowels([])) 
File "C:\Users\Miraj\Desktop\Q3.py", line 17, in get_first_last_vowels 
if a_list[0] == vowels or a_list[-1] == vowels: 
IndexError: list index out of range 

を取得するので、私は得ることができます。

["Roberto", "Jessie", "A", "Geoffrey", "Eli"] 

は、これまでのところ、私はこのコードを持っている

oeaei 
に変身します私が間違っているところで助けてくれる人もいる。ありがとうございました。

あなたは空のリストに取り組んでいる

a_list = ["Roberto", "Jessie", "A", "Geoffrey", "Eli"] 
+0

'a_list = [" Roberto "、" Jessie "、" A "、" Geoffrey "、" Eli "]'ですか? – Idos

+0

インデックス「0」と「-1」が範囲外の場合、リストは空です。 – jonrsharpe

+0

@Idosはいそれを追加しないと申し訳ありません。 –

答えて

1

a_list = ["Roberto", "Jessie", "A", "Geoffrey", "Eli"] 

    def start_end_vowels(a_list): 
     vowels = "aeiou" 
     result = "" 

     for words in a_list: 
      words = words.lower() 

      for vowel in vowels: 

       if len(words) == 1: 

        if words == vowel: 
         result += vowel 

       else: 

        if words.startswith(vowel): 
         result += vowel 

        if words.endswith(vowel): 
         result += vowel 
     return result 

     # Output 

     >>> a_list = ["Roberto", "Jessie", "A", "Geoffrey", "Eli"] 
     >>> start_end_vowels(a_list) 
     'oeaei' 

     >>> a_list = ["Abba"] 
     >>> start_end_vowels(a_list) 
     'aa' 

をこれはあなたの例のための作業を行いますが、私は確かに他のテストケースを二重チェックでしょう。このような質問をさまざまな方法で行う方法を知っておくとよいでしょう。

更新:開始母音と終了母音が同じ場合に機能するように編集されました。

+0

これは 'Abba'という名前では機能しません。それはb 'aa'であるべきですが、 'a'しか見つけません。 –

+0

@R。慈悲、母音で始まり母音で終わる言葉が必要な理由は何ですか?両方のオカレンスを印刷する必要がありますか? – RoadRunner

+0

@MikeMüllerを修正しました – RoadRunner

1

わかりました。さらに、これは動作しません:

>>> new_list += a_list[vowels] 

TypeError: list indices must be integers, not str

vowelsので、文字列ではなく整数です。 append()を使用します。また、間違った状態をチェックしている

if a_list[0] == vowels or a_list[-1] == vowels: 

は次のようになります。

if a_list[0] == letters or a_list[-1] == letters: 

これはa_listにすべての単語のために実行する必要があるので、必ずそれがループ内であることを確認してください独立したものではありません。あなたはこの試みることができる

1

これは動作します:

def find_vowels(a_list): 
    vowels = set('aeiou') 
    res = [] 
    for word in a_list: 
     if not word: 
      continue 
     word = word.lower() 
     if word[0] in vowels: 
      res.append(word[0]) 
     if len(word) > 1 and word[-1] in vowels: 
      res.append(word[-1]) 
    return ''.join(res) 

今:あなたが書く必要はありませんように

>>> a_list = ["Roberto", "Jessie", "A", "Geoffrey", "Eli"] 
>>> find_vowels(a_list) 
'oeaei' 
1

あなたのコードは、あなたがやろうとしているものの光の中でいくつかの欠点を持っている

for words in a_list: 
あなたが書いた時に

を書いたとき

a_list = [words.lower() for words in a_list] 

すべての単語にわたるループは、2行目だけで行われます。

はまた、あなたが

if a_list[0] == vowels or a_list[-1] == vowels: 

その後、a_list[0]またはa_list[-1]と言ったときに真になることはありません、文字列全体'aeiou'、と一致しています。 a_list[0]またはa_list[-1]と個々の母音を一致させる必要があります。

そして最後に

new_list += a_list[vowels] 

、@Idosが言ったように、この行は、仕事に行くのではありません。

だから私は、これらのすべてを考慮に入れると、特別な場合を考慮して、新しいコードを書いた、単語が一文字の場合は。コードは以下の通りです

a_list = ["Roberto", "Jessie", "A", "Geoffrey", "Eli"] 
vowels = ['a','e','i','o','u'] 
new_list = [] 
for word in a_list: 
    if len(word)>=2: 
     if word[0].lower() in vowels: 
      new_list.append(word[0].lower()) 
     if word[-1].lower() in vowels: 
      new_list.append(word[-1].lower()) 
    elif len(word)==1: 
     if word.lower() in vowels: 
      new_list.append(word.lower()) 
print (''.join(new_list)) 
-1

listcompsまたはgenexpsを使用して、次のように簡潔なプログラムを書くことができます。それは3行と英語のように読んでいる。

vowels = 'aeiou' 
# collect 
groups = (word if len(word) == 1 else (word[0], word[-1]) for word in words) 
# flatten and filter 
chars = (char for group in groups for char in group if char.lower() in vowels) 
# consume the iterator 
''.join(chars) # 'oeAEi' 
関連する問題