Python函数内简单循环的打印顺序为何出现反转问题
顺序异常原因
问题出在你定义的存储字符串的变量s的类型上:
- 你用大括号
{}包裹元素的写法s={"i am good", " i am fine"}创建的是Python的**集合(set)**类型,不是有序列表。集合本身的设计定位是做快速成员判断、元素去重,从数据结构设计上就不承诺保留元素的插入顺序,遍历集合时的元素输出顺序不受你书写顺序控制,自然会出现和预期顺序不符甚至反转的情况。 - 只有用方括号
[]包裹元素创建的列表(list)类型,才是严格维护元素插入顺序的线性序列,遍历的时候会按照你写入元素的先后顺序逐个读取。
修正方案
把创建s的大括号替换为方括号,改为有序列表即可:
# 用方括号创建有序列表,保留元素写入顺序 s = ["i am good", " i am fine"] def splitter(): for i in s: print(i.split()[2]) splitter()
执行上述代码后会得到预期输出:
good fine
补充说明:不要依赖Python高版本中集合的遍历顺序表现,这个顺序是解释器内部实现带来的附带效果,不属于集合类型的语法承诺,版本变动、元素增减都可能导致遍历顺序变化,需要有序遍历场景请直接使用列表、有序字典等明确保证顺序的类型。
内容的提问来源于stack exchange,提问作者Sneha Kumari
相关产品推荐
相关产品推荐

