2012-12-07 123 views
3

我無法弄清楚爲什麼我只能從一NumPy的陣列一組蟒蛇一套,Python的交換元素的順序:訂購從NumPy的陣列

import numpy as np 
A = np.array([2]) 
B = np.array([2, 8]) 
setA = set(A) 
setB = set(B) 

In [6]: A 
Out[6]: [2] 

In [7]: B 
Out[7]: [2, 8] 

In [8]: setA 
Out[8]: set([2]) 

In [9]: setB 
Out[9]: set([8, 2]) 

In [10]: list(setA.union(setB)) 
Out[10]: [8, 2] 

In [11]: np.union1d(A,B).tolist() 
Out[11]: [2, 8] 

爲什麼沒有秩序就不會當我創建set(B)時保持?

+1

'print set([8,2])== set([2,8])' –

+0

我同意它在某種意義上並不重要,但儘管如此,我仍然認爲*爲什麼*是一個有效的問題... –

+0

爲什麼很複雜,並與散列方法有關。 –

回答

3

set根據定義,它們沒有順序 - 它們被創建以優化某些操作,例如那些用於遏制的測試。因此,當您創建/添加元素到集合時,您絕不應該依賴訂單保存。

3

集合是unordered collections of unique elements,所以set([2,8])和set([8,2])完全相同。你爲什麼在乎?也許一個集合不是你所需要的...

+0

Doh!這就說得通了。訂單確實有所作爲,所以我可能不得不使用另一種方法。謝謝。 – aindap