2009-08-17 80 views
26

使用列表理解時,是否以任何方式保證新列表的順序?作爲一個人爲的例子,是通過列表理解的定義保證以下行爲:是否保證了列表理解的結果順序?

>> 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 

具體來說,這是我感興趣的訂貨這裏。

+2

是的,它有保證。這是一個序列。 – hughdbrown 2009-08-17 05:15:42

回答

28

是的,列表理解保留了原始迭代(如果有的話)的順序。 如果原始迭代是排序的(列表,元組,文件等),那麼您將在結果中得到的順序。如果你的iterable是無序的(set,dict等),那麼對這些條目的順序沒有任何保證。

+1

有了套裝和字幕,我相信如果數據沒有變化,訂單就不會改變。例如給定一個's',以下將始終成立:'[x for s in] == [x for s in s]''。 – 2009-08-17 05:32:35

+0

這是否也意味着理解的執行順序?即如果p(x)]按照s的順序調用p(x),將會[[x for x in s]),或者可能(即使僅在理論上)處於不同的順序,並且結果以某種方式「排序」回到正確的順序? – 2015-01-09 13:28:32

3

是的,列表是一個序列。序列順序很重要。

相關問題