Перейти к содержимому

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

  • автор:

Как определить число различных элементов в упорядоченном списке?

Подкиньте идею или код(в котором я буду разбираться)/ Думаю сделать это через два цикла for. Если есть более короткое решение, напишите мне. Задача:

Дан список, упорядоченный по неубыванию элементов в нем. Определите, сколько в нем различных элементов.

Отслеживать
13.7k 12 12 золотых знаков 43 43 серебряных знака 75 75 бронзовых знаков
задан 3 фев 2021 в 21:25
19 1 1 серебряный знак 4 4 бронзовых знака

Можно через сортировку, можно через set, можно и вправду двойным циклом: добавляем i-тый элемент в массив ans, если в массиве a[i] not in ans. А, если упорядоченный, то просто проверить, что данный элемент не равен предыдущему

3 фев 2021 в 21:32

список упорядоченный, а значит, вы можете за 1 проход подсчитать дубликаты. Зная количество дубликатов уже просто найти количество различных значений.

3 фев 2021 в 21:33

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Хватит и одного цикла: считать разницу двух соседних элементов. Если не 0, то они различные. Это если числа. Если не числа, то просто сравнивать соседние элементы.

n = len(set(spisok)) 

Отслеживать
ответ дан 3 фев 2021 в 21:28
25.9k 7 7 золотых знаков 31 31 серебряный знак 48 48 бронзовых знаков

Всё-таки если в условии подсвечено, что дан отсортированный список, то вряд ли ожидается, что это надо решать через set.

3 фев 2021 в 22:41
@Xander я потому и написал целый первый абзац
3 фев 2021 в 22:43
@Xander про сет тем не менее ограничений тоже нет
3 фев 2021 в 22:50

А вот ещё такой забавный вариант у меня получился чисто по приколу:

print(sum(x != y for x,y in zip(a, a[1:])) + bool(a)) 

Второе слагаемое нужно, чтобы правильно учесть как пустой список, так и первый элемент списка если список не пустой. А первое слагаемое считает, сколько было изменений значения в списке после первого элемента.

Отслеживать
ответ дан 4 фев 2021 в 8:45
67.7k 5 5 золотых знаков 20 20 серебряных знаков 51 51 бронзовый знак

самый быстрый способ (раз упорядоченный список):

nums = [1, 2, 2, 3, 4, 5, 5, 5] count = 1 for i in range(1, len(nums)): if nums[i - 1] != nums[i]: count += 1 print(count) 

или чуть сократив код:

count = 1 for i in range(1, len(nums)): count += nums[i - 1] != nums[i] 

правда стоит сделать проверку для ситуации, когда список пустой

из той же серии (если требуется не только подсчитать кол-во элементов, но и найти эти элементы)

count = len([nums[0]] + [nums[i] for i in range(1, len(nums)) if nums[i - 1] != nums[i]]) 

Это все требует одного прохода по списку

Можно написать очень короткий код, но по времени работы для такой задачи он будет неоптимальным

count = len(set(nums)) 

Самый неоптимальный по времени работы код

nums = [1, 2, 2, 3, 4, 5, 5, 5] res = [] for elem in nums: if elem not in res: res.append(elem) print(len(res)) 

Как посчитать количество элементов в массиве python

В питоне нету массивов. А кортежи, списки и словари есть. Бесит когда люди говорят про массивы в питоне т.к массив со своими элементами будет храниться в выделенной области памяти на компьютере, а каждый элемент списка будет храниться в разных местах памяти.

24 февраля 2022

Легко. Для этого используется функция len() . Она принимает список и возвращает количество элементов в нём.

>>> collection = [1, 2, 'hexlet'] >>> len(collection) 3 

Условие

Дан список, упорядоченный по неубыванию элементов в нем. Определите, сколько в нем различных элементов.

Решение

a = [int(i) for i in input().split()] num_distinct = 1 for i in range(0, len(a) - 1): if a[i] != a[i + 1]: num_distinct += 1 print(num_distinct)

Добавить комментарий Отменить ответ

ЕГЭ на соточку для чайников

Прошу прощения, что так долго пропадал. Питошка вернулся, да еще и с группой в вконтакте, подписывайтесь. Помимо этого, на питошке откроется новая рубрика, в которой будут четкие объяснения всех заданий ЕГЭ и ОГЭ по информатике, внимательно прочитав которые, я уверен, вы улучшите свои баллы на экзамене ��

Посчитать количество различных элементов в списке

Дан список. Посчитайте, сколько в нем различных элементов, не изменяя самого списка.

Входные данные
Вводится список чисел. Все числа списка находятся на одной строке.

Выходные данные
Выведите ответ на задачу.

Примеры
входные данные
3 2 1 2 3
выходные данные
3

Помогите пожалуйста решить задачу

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Определите количество различных элементов в списке
Дан список, упорядоченный по неубыванию элементов в нем. Определите, сколько в нем различных.

В списке определить минимальный и максимальный элементы, посчитать количество отрицательных элементов
Как гласит задание: В списке целых, заполненном случайными числами, определить минимальный и.

Посчитать, сколько в списке различных элементов, не изменяя самого списка
Дан список. Посчитайте, сколько в нем различных элементов, не изменяя самого списка. входные.

Посчитать количество различных элементов в массиве
Дан линейный массив целых чисел ввести с клавиатуры не менее 10 элементов и посчитать сколько в нем.

Эксперт по компьютерным сетям

5890 / 3348 / 1034
Регистрация: 03.11.2009
Сообщений: 9,977
а что у Вас именно не получается?
104 / 94 / 14
Регистрация: 20.06.2010
Сообщений: 964
Записей в блоге: 16

print (len(set(input("Введите числа через пробел:").split())))

Регистрация: 23.01.2016
Сообщений: 98
В том и загвоздка, что «set» использовать нельзя
104 / 94 / 14
Регистрация: 20.06.2010
Сообщений: 964
Записей в блоге: 16

1 2 3 4 5 6 7 8
array = input("Введите список через пробел").split() count = 0 unique_array = [] for x in array: if x not in unique_array: count += 1 unique_array.append(x) print(len(unique_array))

Эксперт NIX

2794 / 2037 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
bodrich, Чем второй вариант отличается от первого? Более сложным созданием множества?

1 2 3 4 5 6 7 8
my_array = input("Введите список через пробел").split() count = 0 for i in range(len(my_array)): try: my_array.index(my_array[i], i + 1): except ValueError: count += 1 print(count)

104 / 94 / 14
Регистрация: 20.06.2010
Сообщений: 964
Записей в блоге: 16

ЦитатаСообщение от Marinero Посмотреть сообщение

bodrich, Чем второй вариант отличается от первого? Более сложным созданием множества?
set нельзя использовать
Alvin Seville
342 / 272 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9

1 2 3 4 5 6
a=[input() for k in range(int(input("Введите количество чисел!")))] for k in a: b[n]=k while b[n] in a: a.remove(b[n]) n+=1

Добавлено через 2 минуты
Этот вариант подходит только когда я изменяю начальный список. Честно, можно создать копию начального списка и начальный удалить. Следовательно, я уже начальный изменить не смогу — его не будет существовать.

Добавлено через 2 минуты

1 2 3 4 5 6 7 8
c=[input() for k in range(int(input("Введите количество чисел!")))] a=list(c) c.clear() for k in a: b[n]=k while b[n] in a: a.remove(b[n]) n+=1

Регистрация: 25.10.2016
Сообщений: 5

Пожалуйста, помогите найти ошибку в коде.
Задача:
Write a program that will generate 1000 numbers, each between 0 and 99. Keep a count of how often each number is generated, and at the end of the run print out the counts. For example, you might get this output (it’s unlikely, but you might):

0 was generated 100 times
5 was generated 700 times
62 was generated 200 times

Notes: this program is different to the others — the numbers you are generating should be used — as indices into the list, not as values to be stored in the list. Array position 0 should store the count of zeros generated, and so on. You’ll have to set up a list containing enough positions before you start storing the data.
У меня получился код:

1 2 3 4 5 6 7 8 9 10 11 12 13 14
import random list = [int(random.randint(0,100))] mylist = [] x = [random.randint(0,100)] count=1 for x in range(0,100): mylist.append(x) while count1000: list.append(x) else: count==1000 break print(list.count(x))

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *