Попробуй это. У list
есть метод подсчета количества вхождений элемента.
genres_list = ['rock', 'pop', 'folk', 'dance', 'rusrap', 'ruspop', 'world', 'electronic', 'alternative', 'children', 'rnb', 'hip', 'jazz','postrock', 'latin', 'classical', 'metal', 'reggae', 'tatar','blues','pop', 'jazz']
print(genres_list.count('pop'))
output
2
list.count()
сложность O(n)
.
Вы можете написать свою собственную функцию подсчета.
def find_genre(genre):
count=0
for _genre in genres_list:
if _genre==genre:
count+=1
return count
print(find_genre('pop'))
#2
timeit
анализ по списку размером 2 миллиона. Результаты на момент написания статьи (python 3.7, windows 10)
In [38]: timeit genres_list.count('pop') #My answer
26.6 ms ± 939 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [40]: timeit Counter(genres_list)['pop'] #Pitto's answer using collections.Counter
92.5 ms ± 751 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
Теперь пользовательские функции подсчета, включая меня, предложены.
def find_genre(genre):
count=0
for _genre in genres_list:
if _genre==genre:
count+=1
return count
In [42]: timeit find_genre('pop')
63.9 ms ± 803 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
Просто для сравнения ( Который я не рекомендую использовать ). Я написал несколько других функций для вычисления количества.
In [36]: timeit sum(list(map(lambda x:x=='pop',genres_list)))
334 ms ± 13.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [37]: timeit len(list(filter(lambda x:x=='pop',genres_list)))
188 ms ± 18.3 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [44]: timeit ' '.join(genres_list).count('pop')
41.5 ms ± 2.6 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
В вашем коде произошла ошибка потому что вы используете count
для расчета количества жанров и снова вы использовали count
в качестве циклической переменной. В каждой итерации count
становится str
, и мы не можем добавить str
к типу int
.