Как отсортировать список и найти количество различных значений?

Рейтинг: 0Ответов: 2Опубликовано: 28.01.2023

Мне нужно отсортировать список и найти количество различных значений.

К примеру я ввожу в переменную 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("Количество уникальных значений")

Количество дупликатов я так просто вывожу, но и тут тоже неправильно...

Ответы

▲ 0Принят

Вы усложняете себе жизнь, возможно короче применением класса 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().

▲ 2

Сортировка списка:

b.sort()

Количество различных значений:

len(set(b))