2016-10-04 4 views
1

list comprehensionを使用して以下を達成する方法はありますか?それとも、これを達成するためにもっとPythonicな方法がありますか?リストの理解を使用してタスクを達成する方法

count = 0 
x = 'uewoiquewqoiuinkcnsjk' 
for letter in x: 
    if letter in ['a', 'e', 'i', 'o', 'u']: 
     count += 1 

ベストプラクティスを習得しようとしていますか?

答えて

4

あなたは発電機でsumを使用することができます01としてTrueまたはFalseTrueFalsecan reliably be usedを生成し、:

sum(c in 'aeiou' for c in x) 

またはフィルタ+ LEN:

len(filter(lambda c: c in 'aeiou', x)) 

すばらしいやり方彼反対は、文字列中の文字を削除するためにstr.translateを使用することです:

>>> x.translate(None, 'aeiou') 
wqwqnkcnsjk 

それではあなたが行うことができます。すべてのケースで

len(x)-len(x.translate(None, 'aeiou')) 

、答えは10

+0

これも良いです!ありがとう、フィルタを使用すると思います – mangodreamz

+0

'sum'はリストを作成しないのでいいです – zvone

4

list_comprehensionとlen関数の組み合わせを使用します。 in以来

>>> x = 'uewoiquewqoiuinkcnsjk' 
>>> len([i for i in x if i in 'aeiou']) 
10 
>>> 
+0

うわーこれです完璧です!ありがとう – mangodreamz

関連する問題