2013-04-03 51 views
2

当我做这样的事情:是否将列表转换为集会更改元素的顺序?

U = [(1.0, 0.0), (0.0, 1.0)] 
set(U) 

它给我:

{(0.0, 1.0), (1.0, 0.0)} 

我只想列表转换成一组。任何帮助?

谢谢

+1

这是一个元组列表。 – squiguy 2013-04-03 23:58:51

+0

通过“改变序列”,你的意思是“改变顺序”?集合没有订单,它们显示和/或迭代的顺序完全是任意的。 – DSM 2013-04-04 00:00:17

+4

'集合'本质上是无序的。 – FatalError 2013-04-04 00:00:23

回答

3

套件没有订购。字典也没有订购。如果你想保留一个特定的订单,然后使用一个列表。

>>> ''.join(set("abcdefg")) 
'acbedgf' 
>>> ''.join(set("gfedcba")) 
'acbedgf' 
>>> ''.join(set("1234567")) 
'1325476' 
>>> ''.join(set("7654321")) 
'1325476' 

显然,当你遍历一组一些种为了有出来。但是这个顺序是一个你无法指定的任意顺序。

这里是我最喜欢的:

>>> {'apple', 'banana'} 
{'banana', 'apple'} 
>>> {'banana', 'apple'} 
{'apple', 'banana'} 

顺序由哈希冲突的影响,所以它不仅依赖于集的内容,但插入的太顺序。但你无法控制订单。

+0

我认为让OP感到困惑的是他们认为元组内部元素的顺序已经重新排列(因为这两个元组是对称的)。你可能想解释一下。 – jurgenreza 2013-04-04 00:14:11

+0

@jurgenreza:你知道,向OP解释事情要比为了让他们解释它而随意乱搞其他人更有效率。无论如何,我认为你是对的。 – 2013-04-04 00:15:30

+0

耶稣!我的意思是没有冒犯,我认为,因为你的答案是完整的,你可能想要添加一条线。真是一种态度! – jurgenreza 2013-04-04 00:18:13

0

我认为令你困惑的是元组的对称性。将列表转换为集不会影响元组中项目的排列,而不会影响元组的顺序。那是因为集合本质上是无序的。这是另一个非对称元组的例子。

>>> U = [(2.0, 0.0), (0.0, 1.0)] 
>>> set(U) 
{(0.0, 1.0), (2.0, 0.0)}