2016-11-29 2 views
0

У меня вопрос о порядке итерации в списке, когда я использую цикл for. Я пытаюсь пройти список пар и выполнять некоторые операции над ними. Например, рассмотрим следующий код:в python 2.7 порядок итерации для цикла

for j in my EdgeList: #Edgelist= [(4,5),(5,6)] 
    mylist.append(j) 

Тем не менее, я подумал, когда я использую этот код значение J будет первой пары (4,5) в первом цикле, а затем он будет принимать вторую пару (5 , 6) во втором цикле. Когда я отлаживаю программу за строкой, я заметил, что несколько раз она занимает последнюю пару вместо первого и другого прогона отладки, сначала она берет первую пару. Я хочу знать, нормально ли это для python или нет.

+0

Элементы в списке всегда повторяются по порядку. Если вы считаете, что видели, что они повторяются в любом другом порядке при использовании стандартного цикла 'for', вы сделали что-то неправильно. –

+2

Вы уверены, что '' EdgeList' - это список, а не, скажем, 'set'? – brianpck

+0

Я только заметил в своем отладчике, что EdgeList подобен этому набору ([(4,5), (5,6)]), будет ли это причиной этой проблемы? –

ответ

1

IF EdgeList - это список, то итерация всегда начинается с первого индекса и переходит к последнему. Эти два должны выдавать тот же результат:

>>> i = 0 
>>> l = [1,2,3,4,5] 
# Don't use a while loop like this… please. 
>>> while i < len(l): 
... print(l[i]) 
... i+= 1 
# outputs 1 2 3 4 5 separated by newlines 
>>> for item in l: 
... print(item) 
# outputs 1 2 3 4 5 separated by newlines 

Есть моменты, когда EdgeList на самом деле не список. Set s, например, не гарантируют порядок, ни ключи словарей. Это означает, что {'f':1,'g':2}.keys() не имеет, чтобы вернуть последовательность в порядке 1, 2

+0

спасибо. как преобразовать набор в список? так что я могу гарантировать заказ. Я получаю список ребер из функции NetworkX nx.minimum_edge_cut (G, source, sink), поэтому мне нужно преобразовать затем набор в список, чтобы иметь дело с ним в порядке –

+0

@NadaAlzaben Не нужно преобразовывать в список, делать (ы), где s - ваш набор. Не забудьте сохранить результат, поскольку это не делается на месте. – themistoklik

+0

@themistoklik, когда я использую отсортированные (ы), будет ли цикл for циклироваться в этом порядке? –

Смежные вопросы