Если вы не знали, то в модуле itertools в Python есть ряд комбинаторных функций. Туда входят: ◦ product() – прямое (Декартово) произведение одной или нескольких последовательностей. ◦ permutations() – перестановки и размещения элементов последовательности. ◦ combinations() – уникальные комбинации из элементов последовательности. ◦ combinations_with_replacement() – комбинации с замещениями. Например: >>> print(*product([1, 2, 3], 'XY')) (1, 'X') (1, 'Y') (2, 'X') (2, 'Y') (3, 'X') (3, 'Y') >>> print(*combinations([1, 2, 3], 2)) (1, 2) (1, 3) (2, 3) >>> print(*permutations([1, 2, 3], 2)) (1, 2) (1, 3) (2, 1) (2, 3) (3, 1) (3, 2) Хотите узнать больше об этих функциях? Чем отличаются перестановки от сочетаний и размещений? Читайте новую заметку про комбинаторику. Постарался расписать подробно, не забыл даже нарисовать для вас иллюстрации. В конце текста вас ждет бонус: функция по подбору паролей, основанная на combinations_with_replacement(). Не зря же они ее туда добавили?) #coding #bigd