Значение может быть одиночным, входить в пару или повторяться три раза. Списочное выражение отбирает не уникальные числа, а все позиции нужной роли.
set
Если число встречается три раза, оно должно трижды попасть в triple. Команда sum(set(triple)) уничтожит нужные повторения.
triple
sum(set(triple))
rep
Все позиции значений, которые встречаются больше одного раза.
uniq
Одиночные значения.
pair
Позиции значений из пар.
Позиции значения из тройки.
[1, 1, 2, 2] — две пары и два одиночных; [1, 1, 1, 3] — одна тройка и три одиночных; [1, 3, 3] — две тройки и одно одиночное.
[1, 1, 2, 2]
[1, 1, 1, 3]
[1, 3, 3]
Следующий код строит частотный отпечаток трёх строк. Сами значения меняются, а структура остаётся читаемой.
(Демо-2025) Структура записывается как len(triple) == 3 и len(uniq) == 3. После этого можно сравнивать квадрат суммы повторяющихся с квадратом суммы одиночных.
len(triple) == 3
len(uniq) == 3
В H:M каждая позиция узнаёт, сколько раз её значение встречается в B:G. Щёлкни по любой ячейке count — увидишь её формулу.
Сравни две строки с одной тройкой. Структура одинакова, но числовое условие проходит только у одной.
09_repeats.xlsx
Какая сигнатура соответствует одной тройке и трём одиночным числам?
len(set(a))
sum(set(rep))