Последовательный перебор всех возможных чисел из цифр Python

Рейтинг: 0Ответов: 1Опубликовано: 20.01.2023

Есть набор цифр и из них нужно попробовать перебрать все возможные комбинации цифр.
Я смог придумать только подобие какого-то пузырькового алгоритма, который берёт одно число и сравнивает с каждым. Потом это берёт следующее и т.д. Знаю, что можно его оптимизировать и прочее, речь сейчас не об этом. Речь о хоть какой-нибудь работоспособности. Или подскажите, как по-другому можно это сделать. Есть вот такой кусок кода

for i in range(len(checkNumStr)):
        old = checkNumStr[i]

        for j in range(len(checkNumStr)):
            new = checkNumStr[j]

            print(f"Старая - {old}")
            print(f"Новая  - {new}")
            print(f"Меняю {checkNumStr[i]} на {new}, затем {checkNumStr[j]} на {old}")

            replStr = checkNumStr.replace(checkNumStr[i], new).replace(checkNumStr[j], old)
            print(replStr)

На выходе:

Старая - 2
Новая  - 2
Меняю 2 на 2, затем 2 на 2
213
Старая - 2
Новая  - 1
Меняю 2 на 1, затем 1 на 2
223
Старая - 2
Новая  - 3
Меняю 2 на 3, затем 3 на 2
212

Проблема в том, что старое число он не меняет. Второй replace как будто не срабатывает. После второй замены 213 должно стать 123, т.е. 1 и 2 должны поменяться местами, но этого не происходит

Ответы

▲ 1Принят

Если нужно просто перебрать все варианты, можно использовать:

import itertools
print(list(itertools.permutations('123',3)))

Вывод:

[('1', '2', '3'), ('1', '3', '2'), ('2', '1', '3'), ('2', '3', '1'), ('3', '1', '2'), ('3', '2', '1')]