下面的程序是否保证始终产生相同的输出?
s = 'fgvhlsdagfcisdghfjkfdshfsal'
for c in s:
print(c)
s = 'fgvhlsdagfcisdghfjkfdshfsal'
for c in s:
print(c)
str
类型是一个不可变的序列。序列代表了一个有限的有序元素集合(请参见参考指南中的数据模型章节中的序列)。是的。内部存储的字符串是以C样式数组的形式存储的(取决于解释器实现),作为一种顺序数据的连续数组,可以创建一个迭代器。为了使用for ... in ...
语法,在in后面需要能够迭代对象。字符串提供其自己的迭代器,允许它通过for in语法按顺序解析,就像所有Python序列一样。
对于列表和您创建的自定义对象也是如此。然而,并不是所有可迭代的Python对象都会按顺序或表示它们存储的值,这个例子很清楚,就是字典。字典迭代产生可能不按添加顺序排列的键(取决于您使用的Python版本等因素,因此除非使用OrderedDict,否则不要假设它是有序的)而不是类似于列表元组和字符串的顺序值。
是的,没错。在字符串中,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 的回答了解更多信息。
是的,for循环是顺序执行的。