3

下面的程序是否保证总是产生相同的输出?

s = 'fgvhlsdagfcisdghfjkfdshfsal'
for c in s:
    print(c)
4

5 回答 5

5

是的。这是因为str类型是不可变序列。序列表示有限有序的元素集(请参阅参考指南的数据模型章节中的序列)。

保证通过给定字符串(任何序列)的迭代对于 CPython 解释器的不同运行、CPython 的版本和 Python 的实现总是以相同的顺序产生相同的结果。

于 2017-05-02T23:06:31.650 回答
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答案。

于 2017-05-02T23:10:58.410 回答
3

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

列表也是如此,甚至您创建的自定义对象也是如此。然而,并非所有可迭代的 Python 对象都必须按顺序排列或表示它们存储的值,一个明显的例子就是字典。字典迭代产生的键可能会或可能不会按照您添加它们的顺序(取决于您使用的python版本等,所以除非您使用OrderedDict,否则不要假设它是有序的)而不是像列表元组这样的顺序值和细绳。

于 2017-05-02T23:08:59.753 回答
2

是的。for 循环是顺序的。

于 2017-05-02T23:00:39.257 回答
1

是的,循环将始终从第一个字符开始一个一个地打印每个字母,并以最后一个字符结束。

于 2017-05-02T23:01:25.463 回答