列表解析的结果顺序是否有保证?
在使用列表推导式的时候,新生成的列表的顺序有没有什么保证呢?举个例子,下面这种行为是不是由列表推导式的定义来保证的:
>> a = [x for x in [1,2,3]]
>> a
[1, 2, 3]
另外,下面这种相等性有没有保证:
>> lroot = [1, 2, 3]
>> la = [x for x in lroot]
>> lb = []
>> for x in lroot:
lb.append(x)
>> lb == la
True
我这里特别关心的是顺序的问题。
3 个回答
0
过了一段时间,但最近我自己也遇到了类似的问题,需要更多的解释来理解这到底是怎么回事,所以我想分享一下我的看法,希望能对将来的人有所帮助! :)
具体来说,这里讨论的是通过列表推导式得到的值的顺序。
想象一下,你有以下这个列表:
list_of_c = [a, b, c, d, e]
我想用下面的列表推导式来对这个列表中的变量进行四舍五入:
list_of_d = [round(value, 4) for value in list_of_c]
我想知道,这样做后,列表推导式得到的顺序是否会是这样的:
list_of_d = [round_a, round_b, round_c, round_d, round_e]
我收到的回复非常友好,来自@juanpa.arrivillaga,他告诉我,确实是是的,情况就是这样!
3
是的,列表就是一种顺序排列的东西。顺序是很重要的。
46
是的,列表推导式会保持原始可迭代对象的顺序(如果有的话)。如果原来的可迭代对象是有顺序的,比如列表、元组、文件等,那么你得到的结果就是这个顺序。如果你的可迭代对象是无序的,比如集合、字典等,那么结果中的项目顺序就没有保证了。