Воспользуйтесь 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}
l.count(x)имеет квадратичную сложность,c.most_common()— O(n log n). Есть линейное решение. Примеры почему линейное решение может быть гораздо лучше квадратичного с ростом ввода см. в конце ответа – jfs Feb 26 '18 at 15:05min(c, key=c.get)– jfs Feb 26 '18 at 15:12