在循环字符串时,执行顺序是否有保证?

3
下面的程序是否保证始终产生相同的输出?
s = 'fgvhlsdagfcisdghfjkfdshfsal'
for c in s:
    print(c)
5个回答

5
是的,确实如此。这是因为str类型是一个不可变的序列。序列代表了一个有限的有序元素集合(请参见参考指南中的数据模型章节中的序列)。
对于给定字符串(任何序列),在CPython解释器的不同运行、不同版本的CPython和Python实现中,迭代都保证总是以相同的顺序产生相同的结果。

3

是的。内部存储的字符串是以C样式数组的形式存储的(取决于解释器实现),作为一种顺序数据的连续数组,可以创建一个迭代器。为了使用for ... in ...语法,在in后面需要能够迭代对象。字符串提供其自己的迭代器,允许它通过for in语法按顺序解析,就像所有Python序列一样。

对于列表和您创建的自定义对象也是如此。然而,并不是所有可迭代的Python对象都会按顺序或表示它们存储的值,这个例子很清楚,就是字典。字典迭代产生可能不按添加顺序排列的键(取决于您使用的Python版本等因素,因此除非使用OrderedDict,否则不要假设它是有序的)而不是类似于列表元组和字符串的顺序值。


3

是的,没错。在字符串中,for循环按顺序迭代字符。对于列表和元组也是如此——for循环会按顺序迭代元素。

你可能会想到集合和字典。它们不指定特定的顺序,所以:

for x in {"a","b","c"}:  # over a set
    print(x)

for key in {"x":1, "y":2, "z":3}:  # over a dict
    print(key)

迭代器会按照一些难以预测的任意顺序进行迭代。

关于字典和集合的顺序保证,可以参考这个 Stack Overflow 的回答了解更多信息。


2

是的,for循环是顺序执行的。


1
是的,循环将始终按顺序逐个打印每个字母,从第一个字符开始,直到最后一个字符。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接