for / in循环结构是否保留顺序?

时间:2016-06-28 21:41:27

标签: python

普通的for / in语句是否保证列表按顺序迭代?

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

也就是说,上面的循环是否保证每次都打印5 4 3 2

4 个答案:

答案 0 :(得分:29)

for循环的迭代顺序由它迭代的任何对象控制。迭代像list这样的有序集合可以保证迭代列表顺序中的元素,但迭代像set之类的无序集合几乎不会有任何顺序保证。

答案 1 :(得分:4)

对于列表,是的,因为它们是Python中的有序数据结构。

答案 2 :(得分:3)

当您遍历序列(列表,元组等)时,订单会得到保证。 散列结构(字典,集合等)有自己的顺序 - 但对于给定的结构,每次的顺序都是相同的。如果添加或删除元素,则顺序可能不同。

考虑以下代码:我制作一组五个元素,然后用四个相同的 for 循环打印出来。订单是一样的。然后我添加两个元素;这会扰乱订单。

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"

输出:

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 

请注意原始元素不再是相同的顺序:“Dinner”现在出现在“Apple”之后。

答案 3 :(得分:2)

如果您想自己测试一下:

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) 

仅用于控制案例:

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