Статья Автор: Деникина Н.В., Деникин А.В.

9.1 Электронные таблицы — считаем повторы в строке

Считаем, сколько раз число встречается

Почти каждое условие задания 9 начинается со слов про повторы: «одно число повторяется трижды», «два числа встречаются дважды», «все числа различны». Чтобы это проверить, нужно уметь одно: для каждого числа узнать, сколько раз оно встречается в своей строке.

Учимся сразу двумя инструментами: формулой в электронной таблице — так решают на экзамене, и в Python — так удобно проверять себя и тренироваться.

Шаг 1. Сколько раз встречается число

Пусть строка лежит в ячейках A1:E1:  6  6  2  9  2

В электронной таблицеВ Python
=СЧЁТЕСЛИ($A1:$E1; A1)

Впишите в F1 и протяните вправо до J1. Доллары держат границы строки, а A1 сдвигается — так каждое число заменяется на «сколько его тут».

Получится: 2  2  2  1  2

row = [6, 6, 2, 9, 2]

print(row.count(6))   # 2
print(row.count(9))   # 1

row.count(6) — «сколько шестёрок в строке». Тот же СЧЁТЕСЛИ, только для одного числа.


Шаг 2. Собрать повторяющиеся в отдельный список

Оставим только те числа, которые встречаются два раза и больше:

row = [6, 6, 2, 9, 2]
povtor = [el for el in row if row.count(el) >= 2]
print(povtor)   # [6, 6, 2, 2]

Читается вслух: «пройди по каждому el в строке и оставь его, если он встречается не меньше двух раз».

⚠️ Ловушка, на которой теряют баллы. В списке оказалось четыре числа, а не два. Мы идём по каждому элементу строки: шестёрка проходит фильтр дважды (её в строке две), двойка — тоже дважды. Значит «сумма повторяющихся чисел» = 6+6+2+2 = 16, а вовсе не 6+2 = 8.

Если же нужны разные повторяющиеся значения («сколько чисел повторяется»), убираем дубликаты через set:

raznye = set(el for el in row if row.count(el) >= 2)
print(raznye)        # {2, 6}
print(len(raznye))   # 2  — два разных числа повторяются
Есть ещё Counter из модуля collections: он сразу выдаёт словарь {6: 2, 2: 2, 9: 1} — число и сколько его. Инструмент хороший, но работать со словарём привычно не всем, а .count() со списком понятен сразу. Начинай со списка; Counter подхватишь позже.

▶ Попробуй: запусти блок и проследи разницу между длиной списка повторяющихся и количеством разных значений. Затем поменяй row на [4, 7, 4, 9, 4] — сколько станет элементов в povtor?



Строка 6 6 2 9 2, выполнили povtor = [el for el in row if row.count(el) >= 2].
Сколько чисел окажется в списке povtor?


Та же строка 6 6 2 9 2. Чему равна сумма повторяющихся чисел, то есть sum(povtor)?


Условие говорит: «сумма разных повторяющихся значений строки». Для 6 6 2 9 2 — какое выражение и какой результат?


Что напечатает row.count(4) для строки 4 7 4 9 4?


Строка 5 5 8 8 2 3. Отметьте верные утверждения:

Загрузка...
Чтобы оставить комментарий, необходимо авторизоваться
💬
Пока нет комментариев. Будьте первым!
Печать