从NumPy数组中对python集合进行排序

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)时,为什么顺序不能得到保留?


1
print set([8,2]) == set([2,8]) - Joran Beasley
我同意在某种程度上这并不重要,但我仍然认为“为什么”是一个有效的问题... - Andy Hayden
为什么这很复杂,与哈希方法有关。 - Félix Cantournet
2个回答

3
根据定义,set没有顺序 - 它们是为了优化某些操作(例如测试包含性)而创建的。因此,在创建/添加元素到set时,您不应该依赖于顺序保留。

2
集合是无序的独特元素的集合,因此set([2,8])和set([8, 2])完全相同。你为什么在意呢?也许集合并不是你所需要的...

哎呀!那很有道理。顺序确实很重要,所以我可能需要采用另一种方法。谢谢。 - aindap

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接