Я пытаюсь сделать функцию, которая будет вычислять все расстояния каждого маршрута. Например: A находится в (0,0), B находится в (1,0), C находится в (0,1). Затем есть 6 маршрутов, чтобы пройти через все города, такие как ABC, или ACB, или BAC, или BCA, или CAB, или CBA. Здесь мой вопрос: как я могу перечислить все шаблоны факториала, такие как ABC, ACB, BAC, BCA, CAB, CBA. Было бы легко, если бы это было 2! или 3!, но если, например, 8!, это было бы очень сложно. Если вы знаете, я хочу знать ваш совет!
Да, спасибо Пани и kaya3! Это на самом деле не думать о пути назад, так что это будет не тот же маршрут. Я ценю вас, ребята :)
import itertools
string = 'ABC';
result = itertools.permutations(string, 3)
for val in result:
print(''.join(val))
Спасибо, starboy_jb! Мне это помогло. Я не могу выбрать два ответа только потому, что это спецификация, но я ценю!
В Python есть встроенная функция itertools.permutations
. Вы можете использовать его так
from itertools import permutations
data = ['a', 'b', 'c']
print(list(permutations(data)))
Выход:
[('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]
Вы можете сделать так, чтобы данные содержали кортежи, такие как data = [(0, 0), (1, 0), (0, 1)]
Тогда вывод будет выглядеть так
[((0, 0), (1, 0), (0, 1)), ((0, 0), (0, 1), (1, 0)), ((1, 0), (0, 0), (0, 1)), ((1, 0), (0, 1), (0, 0)), ((0, 1), (0, 0), (1, 0)), ((0, 1), (1, 0), (0, 0))]
itertools.permutations