下面的程序是否保证总是产生相同的输出?
s = 'fgvhlsdagfcisdghfjkfdshfsal'
for c in s:
print(c)
下面的程序是否保证总是产生相同的输出?
s = 'fgvhlsdagfcisdghfjkfdshfsal'
for c in s:
print(c)
是的。这是因为str
类型是不可变序列。序列表示有限有序的元素集(请参阅参考指南的数据模型章节中的序列)。
保证通过给定字符串(任何序列)的迭代对于 CPython 解释器的不同运行、CPython 的版本和 Python 的实现总是以相同的顺序产生相同的结果。
是的。在字符串上,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答案。
是的。在内部,您拥有的字符串存储在 c 样式数组中(取决于解释器实现),作为数据的顺序数组,可以创建一个iterator。为了使用for ... in ...
语法,您需要能够在 in 之后迭代对象。字符串提供自己的迭代器,允许通过 for in 语法按顺序解析它,就像所有 python 序列一样。
列表也是如此,甚至您创建的自定义对象也是如此。然而,并非所有可迭代的 Python 对象都必须按顺序排列或表示它们存储的值,一个明显的例子就是字典。字典迭代产生的键可能会或可能不会按照您添加它们的顺序(取决于您使用的python版本等,所以除非您使用OrderedDict,否则不要假设它是有序的)而不是像列表元组这样的顺序值和细绳。
是的。for 循环是顺序的。
是的,循环将始终从第一个字符开始一个一个地打印每个字母,并以最后一个字符结束。