Как отобразить все уникальные элементы списка и их количество по убыванию?
Дан список: data=[пр1, пр1, пр1, пр1, пр2, пр2, пр3]. Требуется получить на выходе отсортированные по убыванию данные в виде:
4 пр1
2 пр2
1 пр3
Сначала пыталась использовать Counter. Вывелось так же, как требуется, но не было сортировки, поэтому решение не подошло. Может есть способ отсортировать элементы в этом случае?
from collections import Counter
c=Counter(data)
for i in c:
print(c[i],i)
Следующей попыткой пробовала так:
data1=set(data)
data2=list(data1)
c1=data.count('пр1')
c2=data.count('пр2')
c3=data.count('пр3')
f=[c1,c2,c3]
Так в data2 остались только уникальные элементы. В f хранятся значения количества повторяющихся элементов в исходном списке. Надо как-то соединить их правильно. Пыталась с помощью zip, но видимо плохо пыталась. А ещё отсортировать и вывести в столбик. То есть мне бы получить вот такой список: [(4, 'пр1'), (2, 'пр2'), (1, 'пр3')]. И при выводе с помощью print(*d, sep = "\n") избавиться от скобок.
Ответы (2 шт):
Возможно, вы что-то не так пробовали.
from collections import Counter
data = ['a', 'b', 'a', 'c', 'b', 'b']
data = Counter(data)
data = [(value, key,) for key, value in data.items()]
data.sort(reverse=True)
print(data)
>> [(3, 'b'), (2, 'a'), (1, 'c')]
Ну а дальше можете делать с этим списком что угодно.
Метод .most_common() (примерно переводится как "самые частые") объекта Counter возвращает ключи-значения в порядке убывания значения (т.е. количества), так что тут можно обойтись без явной сортировки:
from collections import Counter
data = ["пр1", "пр1", "пр1", "пр1", "пр2", "пр2", "пр3"]
counter = Counter(data)
print(counter.most_common())
Вывод: [('пр1', 4), ('пр2', 2), ('пр3', 1)]
Если нужно в каждой паре выводить сначала количество, потом сам элемент, то через list comprehension можно поменять их местами:
inverted = [(value, key) for key, value in counter.most_common()]
print(inverted)
Вывод: [(4, 'пр1'), (2, 'пр2'), (1, 'пр3')]