Форум сайта python.su
0
Есть очень большой список в котором очень много значений, все значения повторяются разное кол-во раз.
Нужно посчитать сколько у каждого значения повторений (все значения известны заранее!).
Самое быстрое, что я смог придумать, это единственный проход по списку с помощью for и добавлением в словарь ключа со значением 1, если такой ключ есть, соответственно 1+1 и так далее.
Вопрос: можно сделать, что то побыстрей этого варианта ?
И ещё маленький вопрос, есть ли смысл преобразовать список в кортеж перед итерацией ? В книгах которые я читал, пишут, что неизменяемые объекты быстрее обрабатываются.
Офлайн
39
collections.Counter
Офлайн
0
4kpt_IIIОдинаковая скорость, но всё равно спасибо, код уменьшился на одну строку
collections.Counter

Офлайн
221
Tucha
как на одну строку? Вы точно его правильно готовите?? Там все решение уходит в одну строку. Вот пример
>>> from collections import Counter >>> d=range(10)+range(0, 20, 2)+range(30,0, -3) >>> c = Counter(d) >>> c Counter({6: 3, 0: 2, 2: 2, 3: 2, 4: 2, 8: 2, 9: 2, 12: 2, 18: 2, 1: 1, 5: 1, 7: 1, 10: 1, 14: 1, 15: 1, 16: 1, 21: 1, 24: 1, 27: 1, 30: 1})
Офлайн
0
JOHN_16Ну да, было две строки, стала одна == код уменьшился на одну строку
Tuchaкак на одну строку? Вы точно его правильно готовите?? Там все решение уходит в одну строку. Вот пример
Офлайн
186
Так вроде недавно обсуждали: http://python.su/forum/topic/28208/
Офлайн