2013-04-03 52 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)}