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

新手上路,请多包涵

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

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

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

原文由 Tony Ennis 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 517
2 个回答

A for 循环的迭代顺序由它迭代的任何对象控制。遍历有序集合,如 list 保证遍历列表顺序中的元素,但遍历无序集合,如 set 几乎没有顺序保证。

原文由 user2357112 发布,翻译遵循 CC BY-SA 3.0 许可协议

当你迭代一个序列(列表、元组等)时,顺序是有保证的。散列结构(dict、set 等)有自己的顺序——但对于给定的结构,顺序每次都是相同的。如果您添加或删除一个元素,顺序可能会有所不同。


考虑以下代码:我制作了一组五个元素,然后用四个相同 的 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”之后。

原文由 Prune 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题