2016-10-03 38 views
-2

誰能給我解釋一下原因:設置列出轉換

p = {-1,2,-3} 
print(p) 

將打印

{2, -3, -1} 

,當我轉換列出

pa = list(p) 
print(pa) 

我會得到

[2, -3, -1] 

我如何轉換p來的列表,包括項目

[-1, 2, -3] 

PS相同的順序:當我使用負項

+2

套件未訂購。總之,除非您存儲訂單,否則您無法保存訂單... –

+0

看似奇怪的事情發生在這個小整數週圍,因爲它們散列到自己的值,所以經常(但不是總是)按照排序順序保存。但你不應該依賴字典或設置順序。 – jonrsharpe

+0

感謝您的及時回覆。我已經知道這些集合是不可變的。但我沒有選擇。我從一個方法中獲得一個集合。我必須將其轉換爲列表(同時保持相同的順序),以便將其提供給另一種方法。任何幫助! –

回答

0

set在Python是無序的,這種情況只。如果您想維護元素的順序,請改爲使用collections.OrderedDict.fromkeys()。這也將表現爲set。例如:

>>> import collections 
>>> p = collections.OrderedDict.fromkeys([-1,2,-3]) 
>>> print(p) 
OrderedDict([(-1, None), (2, None), (-3, None)]) 
>>> p = collections.OrderedDict.fromkeys([-1,2,-3,2]) # <-- 2 repeated twice 
>>> print(p) # <-- Removed duplicated entry of '2', same as set 
OrderedDict([(-1, None), (2, None), (-3, None)]) 
>>> l = list(p) 
>>> print(l) # <-- order is maintained 
[-1, 2, -3] 
+0

對不起,但它不起作用,因爲fromkeys不會將參數集作爲參數 –

+0

您需要將初始化'set'代碼替換爲'collections.OrderedDict.fromkeys()'。一旦創建了該集合,就無法從中提取原始訂單。 –

+0

我必須找到另一種方式。不過謝謝你。 –