python生成器表达式的顺序

时间:2015-01-30 00:28:49

标签: python generator 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中看到了相同的行为。

1 个答案:

答案 0 :(得分:-1)

没有订购Dicts。即使在函数调用之间,也不能依赖于他们的项目以任何特定的顺序返回。