Как отсортировать список и найти количество различных значений?
Мне нужно отсортировать список и найти количество различных значений.
К примеру я ввожу в переменную n значение 5 и мне выводит список [0, 1, 2, 0, 2] и потом выводит что там 3 дубликата, когда их здесь только два, я не понимаю этого.
import random
count = 0
n = int(input())
b = []
a = [b.append(random.randint(0, 5)) for i in range(n)]
print(b)
for i in range(len(b) - 1):
if b.count(b[i]) > 1:
count += 1
print(f"Количество дупликатов в списке B: {count}")
print("Количество уникальных значений")
Количество дупликатов я так просто вывожу, но и тут тоже неправильно...
Ответы (2 шт):
Вы усложняете себе жизнь, возможно короче применением класса Counter:
import random
from collections import Counter
n = int(input())
b = [random.randint(0, 5) for i in range(n)]
print(b)
occurrences = Counter(b)
print(f"Количество уникальных значений: {len(occurrences)}")
Тест:
Ввод:
5Вывод:
[2, 1, 4, 1, 3]
Количество уникальных значений: 4
Объяснение:
В библиотеке Питона находится модуль collections и в нем класс Counter («счет»), который все подсчитает за вас.
Пример применения:
>>> from collections import Counter
>>>
>>> Counter([5, 6, 7, 6, 7])
Counter({6: 2, 7: 2, 5: 1})
С объектом типа Counter вы можете работать как с любым словарем, причем
- ключи — отдельные уникальные элементы оригинального списка,
- значения ключей — количество нахождений ключа в оригинальном списке.
Количество ключей точно то, что вы хотели, достаточно только применить функцию len().