>>> graph = [(1, 2), (2, 3), (3, 1)] >>> path = [] >>> while len(graph) > 0: ... for i in graph: ... print('i: {}'.format(i)) ... path.append(i[0]) ... print('path: {}'.format(path)) ... graph.remove(i) ... print('graph: {}'.format(graph)) i: (1, 2) path: [1] graph: [(2, 3), (3, 1)] i: (3, 1) path: [1, 3] graph: [(2, 3)] i: (2, 3) path: [1, 3, 2] graph: []
Код и результат выше. Проблема в четвертой строке вывода — вторая итерация идет не в том порядке: (3, 1) (третий элемент графа) вместо (2, 3) (второй элемент графа). В результате путь равен 1, 3, 2 вместо 1, 2, 3. Проблема решается через for i in sorted(graph), но почему так происходит изначально? В интернете пишут про несоблюдения порядка итерации в словарях, но там это логично. Почему такое происходит со списком?
P.S.
Парсер съедает квадратные скобки в тексте.