2017-12-24 23 views
1

費用のタイプを含む単純なPythonリストがあり、forループでこれらの経費を繰り返したいとします。各反復で、指標が正しい経費タイプを生成する場合、カウンタは1だけ進められます。以下のコードで簡単に書き込むことができますが、高速実行ループを使用していません。ネストされたif文でループを書くPythonic方法

array = ['Groceries', 'Restaurant', 'Groceries', 'Misc', 'Bills'] 
sum = 0 
for i in range(len(array)): 
    if array[i] == 'Groceries': 
     sum += 1 

実行を高速化するこのループを作成するためのもっと無限の方法がありますか?私は、以下のコードスニペットのようなものに見える例を見てきました。注:以下のコードスニペットは機能しません。これは以前に見たアクセラレータ形式の例ですが、完全には理解していません。

sum = [sum + 1 for i in array if array[i] == 'Groceries'] 

答えて

1
for i in range(len(array)): 

間違いませ配列を反復処理のPythonの-ICの方法です。それはVisualBasicの考え方であり、そこからあなた自身を解放するべきです。

あなたは、配列を反復処理したい場合は、次のようにちょうどそれを反復:

array = ['Groceries', 'Restaurant', 'Groceries', 'Misc', 'Bills'] 
for eachItem in array: 
    ... 

を使用すると、ループの中で何があなた次第です。あなたは食料品のリストで、あなたがこれを行うことができhowManyがカウントするようにしたい場合:

array = ['Groceries', 'Restaurant', 'Groceries', 'Misc', 'Bills'] 
groceriesTotal = 0 
for eachItem in array: 
    if eachItem == 'Groceries': 
     groceriesTotal = groceriesTotal + 1 

これは他の人によって読み取り可能であることを、簡単で明確かつ十分に神託です。

1

あなたはこれについてリストの理解が必要だと思えるようです。しかし、リスト内包はリストを生成し、スカラーが必要です。試してくださいarray. count("Groceries")。それだけでカウントについてです場合

2

collections.Counterしてみてください:

from collections import Counter 


array = ['Groceries', 'Restaurant', 'Groceries', 'Misc', 'Bills'] 

counts = Counter(array) 

print(counts) 
# Counter({'Groceries': 2, 'Bills': 1, 'Restaurant': 1, 'Misc': 1}) 

print(counts['Groceries']) 
# 2 
関連する問題