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

Анализ строк числовой таблицы — Повторы и сигнатура частот

Повторы

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

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

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

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

Если число встречается три раза, оно должно трижды попасть в triple. Команда sum(set(triple)) уничтожит нужные повторения.


rep

Все позиции значений, которые встречаются больше одного раза.

a.count(x) > 1
uniq

Одиночные значения.

a.count(x) == 1
pair

Позиции значений из пар.

a.count(x) == 2
triple

Позиции значения из тройки.

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

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


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

Сигнатура показывает устройство строки

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

ABCDEF
значение449923
count222211
Вместо шести крупных карточек — две строки ЭТ: исходные значения и число их повторений.


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

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

Одна тройка и остальные различны

(Демо-2025) Структура записывается как len(triple) == 3 и len(uniq) == 3. После этого можно сравнивать квадрат суммы повторяющихся с квадратом суммы одиночных.



Результат: среди учебных строк проходит 1.

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

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

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

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

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

O3
fx
Выбери ячейку — её значение или формула появится в строке fx. Исходные числа можно менять прямо в таблице.
ABCDEFGHIJKLMNO
21222211данет
32333111нетда
43333111нетнет
Служебная ячейка: строка формул показывает, как получен результат.
Две пары: 1; одна тройка и числовое условие: 1.
Рабочая книга 09_repeats.xlsx находится во вложениях. В ней можно продолжить исследование на большем наборе строк.

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


Ловушки
Использовали только len(set(a)) и не различили тройку и две пары.
Написали sum(set(rep)) и удалили нужные копии.
Проверили общую длину rep, но не точную частоту значений.
Загрузка...
Чтобы оставить комментарий, необходимо авторизоваться
💬
Пока нет комментариев. Будьте первым!
Печать