#python #python_3x
Есть список: ['a, b, c', 'b, c, a', 'c, a, b', 'a, b, c', 'a, b, c', 'b, a, c'] Надо найти часто повторяющуюся запись в списке и подсичитать количество повторений и самую меньше всего повторяющуюся запись и подсчитать количество повторений. Помогите с алгоритмом, пожалуйста.
Ответы
Ответ 1
Воспользуйтесь collections.Counter: In [146]: from collections import Counter In [147]: l = ['a, b, c', 'b, c, a', 'c, a, b', 'a, b, c', 'a, b, c', 'b, a, c'] In [148]: c = Counter(l) In [149]: c Out[149]: Counter({'a, b, c': 3, 'b, a, c': 1, 'b, c, a': 1, 'c, a, b': 1}) чаще всего встречающийся элемент: In [150]: c.most_common(1)[0] Out[150]: ('a, b, c', 3) реже всего встречающийся элемент: In [151]: c.most_common()[-1] Out[151]: ('b, a, c', 1) можно легко реализовать нечто похожее самому воспользовавшись словарем: In [175]: d = {x:l.count(x) for x in l} In [176]: d Out[176]: {'a, b, c': 3, 'b, a, c': 1, 'b, c, a': 1, 'c, a, b': 1} In [177]: max(d, key=d.get) Out[177]: 'a, b, c' In [178]: d[max(d, key=d.get)] Out[178]: 3 In [179]: min(d, key=d.get) Out[179]: 'b, c, a' In [180]: d[min(d, key=d.get)] Out[180]: 1 вот и вот более быстрые способы посчитать число вхождений: In [193]: d = {} In [194]: _ = [d.__setitem__(x,1+d.get(x,0)) for x in l] In [195]: d Out[195]: {'a, b, c': 3, 'b, a, c': 1, 'b, c, a': 1, 'c, a, b': 1} In [196]: d = {} In [197]: for x in l: ...: d[x] = d.get(x, 0) + 1 ...: In [198]: d Out[198]: {'a, b, c': 3, 'b, a, c': 1, 'b, c, a': 1, 'c, a, b': 1}
Комментариев нет:
Отправить комментарий