Найти - Пользователи
Полная версия: Результат итерации через список имеет неправильный порядок/List iteration result is out of order
Начало » Python для новичков » Результат итерации через список имеет неправильный порядок/List iteration result is out of order
1
Kurtz
 >>> 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.
Парсер съедает квадратные скобки в тексте.
py.user.next
Kurtz
Почему такое происходит со списком?
Ты из него удаляешь во время итерации по нему, поэтому i перескакивает. При удалении элемента в списке все элементы справа от него сдвигаются влево. А итерация идёт как бы по индексам элементов.

Можешь сделать
  
    for i in graph[:]:
Kurtz
py.user.next
Понял, спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB