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

Повторы и сигнатура частот

Повторы

У строки есть частотный отпечаток

Значение может быть одиночным, входить в пару или повторяться три раза.
Для поиска частот фильтруйте числа с помощью списочных выражений. 
Но помните, списочное выражение отбирает не уникальные числа, а все позиции нужной роли.

Микропаттерн: фильтруй исходную строку. Тогда копии не теряются, а суммы и средние считаются ровно так, как написано в условии.
Почему не set

Копии имеют смысл

Если число встречается три раза, оно должно трижды попасть в отфильтрованный список (triple).

Команда sum(set(triple)) уничтожит количество повторений.


Точная схема повторов
freq = sorted([a.count(x) for x in set(a)])

[1, 1, 2, 2] — две пары и два одиночных; [1, 1, 1, 3] — одна тройка и три одиночных; [1, 3, 3] — две тройки и одно одиночное.


Мини-лаборатория

Следующий код строит частотный отпечаток трёх строк. Сами значения меняются, а структура остаётся читаемой. Поменяйте значения в списке, чтобы понять точную схему повторов.



Сигнатуры: [1, 1, 2, 2], [1, 1, 1, 3], [1, 3, 3].

Полный пример

(Демо-2025)  В файле электронной таблицы 9-248.xls в каждой строке записаны шесть натуральных чисел. Определите количество строк таблицы, содержащих числа, для которых выполнены оба условия:

– в строке только одно число повторяется трижды, остальные числа различны;
– квадрат суммы всех повторяющихся чисел строки больше квадрата суммы всех её неповторяющихся чисел.

В ответе запишите только число.

Примечание
Прикрепеленный к заданию файл откройте в редакторе электронных таблиц (LibreOffice Calc) и сохраните его в формате .csv. Откройте в блокноте и посмотрите разделитель между числами (обычно точка с запятой). Или просто скопируйте все числа в текстовый файл (через блокнот).



Решение в электронной таблице

Повторы как служебная строка count

В H:M каждая позиция узнаёт, сколько раз её значение встречается в B:G. Щёлкни по любой ячейке count — увидишь её формулу.

Исследуйте такие данные

Сравни две строки с одной тройкой. Структура одинакова, но числовое условие проходит только у одной.

O3
fx
Выбери ячейку — её значение или формула появится в строке fx. Исходные числа можно менять прямо в таблице.
  A B C D E F G H I J K L M N O
2 1 2 2 2 2 1 1 да нет
3 2 3 3 3 1 1 1 нет да
4 3 3 3 3 1 1 1 нет нет
Служебная ячейка: строка формул показывает, как получен результат.
Две пары: 1; одна тройка и числовое условие: 1.

Какая сигнатура соответствует одной тройке и трём одиночным числам?


Ловушки
Использовали только len(set(a)) и не различили тройку и две пары.
Думаете, что в  triple = [x for x in a if a.count(x) == 3] будет находиться только одно значение, а на самом деле их там 3 и все они одинаковые!  Длину можно проверять после преобразования множества. И тогда верным будет условие len(set(triple)) == 1
Attached files
9-248.csv
Печать