Does the for/in loop construct preserve order?

Question:

Does an ordinary for/in statement guarantee the list is iterated in order?

my_list = [5,4,3,2]
for i in my_list
    print(i)

That is, is the loop above guaranteed to print 5 4 3 2 every time?

Asked By: Tony Ennis

||

Answers:

A for loop’s iteration order is controlled by whatever object it’s iterating over. Iterating over an ordered collection like a list is guaranteed to iterate over elements in the list’s order, but iterating over an unordered collection like a set makes almost no order guarantees.

Answered By: user2357112

When you iterate over a sequence (list, tuple, etc.), the order is guaranteed.
Hashed structures (dict, set, etc.) have their own order — but for a given structure, the order will be the same each time. If you add or delete an element, the order may then be different.


Consider the folloing code: I make a set of five elements, and then print it out with four identical for loops. The order is the same. Then I add two elements; this upsets the order.

my_set = set(["Apple", "Banana", "Casaba", "Dinner", "Eggplant"])

for food in my_set:
    print food,
print "n"

for food in my_set:
    print food,
print "n"

for food in my_set:
    print food,
print "n"

for food in my_set:
    print food,
print "n"

my_set.add("Fruitcacke")
my_set.add("Grape")

for food in my_set:
    print food,
print "n"

Output:

Casaba Dinner Apple Eggplant Banana 

Casaba Dinner Apple Eggplant Banana 

Casaba Dinner Apple Eggplant Banana 

Casaba Dinner Apple Eggplant Banana 

Casaba Fruitcacke Grape Apple Dinner Eggplant Banana 

Note how the original elements are no longer in the same order: “Dinner” now comes after “Apple”.

Answered By: Prune

If you want to test it yourself:

my_list = [5,4,3,2]

for _ in range(20):
    new_list = []
    for i in my_list:
        new_list.append(i)
    print(my_list == new_list) 

And just for a control case:

print([2,4,5,3] == my_list)
Answered By: Jeff

For lists, yes, since they are ordered data structures in Python.

Answered By: David Smith
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.