3

我无法弄清楚为什么我从 NumPy 数组中创建一个集合,Python 交换了元素的顺序:

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)

4

2 回答 2

3

sets 根据定义没有顺序 - 它们的创建是为了优化某些操作,例如那些测试遏制。因此,当您创建/添加元素到集合时,您永远不应该依赖订单保存。

于 2012-12-07T22:49:43.300 回答
2

集合是唯一元素的无序集合,因此 set([2,8]) 和 set([8, 2]) 完全相同。你为什么在乎?也许一套不是你需要的......

于 2012-12-07T22:51:01.550 回答