我有一个例子,其中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中看到了相同的行为。
答案 0 :(得分:-1)
没有订购Dicts。即使在函数调用之间,也不能依赖于他们的项目以任何特定的顺序返回。