2016-10-03 64 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

我必须找到另一种方式。不过谢谢你。 –