python 生成器表达式的顺序

Order of python generator expression

我有一个示例,其中 python 生成器表达式的迭代顺序似乎与类似的列表理解和生成器函数不同。

例如代码

n = 10
d = {i : str(i) for i in range(n)}

for i in d:
    print d[i],
print

def func_gen(d):
    for i in range(n):
        yield d[i]

print(list(func_gen(d)))

g = [d[i] for i in range(n)]
print(g)

g = {d[i] for i in range(n)}
print(list(g))

有输出

0 1 2 3 4 5 6 7 8 9
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
['1', '0', '3', '2', '5', '4', '7', '6', '9', '8']

我希望生成器表达式能够像列表推导式那样产生有序的输出。生成器表达式有什么东西 说不能保证订单?

为什么生成器表达式的顺序与其他表达式不同,即使构造几乎相同?它甚至与遍历字典的顺序不同,所以看起来不像 这是顺从的。

我在 Python 2 和 3 中看到相同的行为。

字典未排序。您不能指望它们的项目以任何特定顺序返回,即使在函数调用之间也是如此。