普通的for / in语句是否保证列表按顺序迭代?
my_list = [5,4,3,2]
for i in my_list
print(i)
也就是说,上面的循环是否保证每次都打印5 4 3 2
?
答案 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)