0

这是我的代码:我使用 set() 并返回 [3, 14, 6]

items = [3, 6, 3, 3, 14]
set(items)
>>> set([3,14,6])

我的问题是 set 函数如何组织它的值输出。如果我们考虑一下,3 是第一个数字,6 是列表中的第二个数字,那么它应该输出 [3,6,14] 吗?

4

2 回答 2

2

集合是无序的。从文档中:

作为无序集合,集合不记录元素位置或插入顺序。

像字典一样,排序是基于存储键的哈希值。您不能依靠这种明显的顺序来保持稳定。

如果您对底层数据模型感兴趣,底层数据结构称为Hash Table,但在集合中只存储键,值留空。

于 2012-11-16T08:29:47.617 回答
1

@Martijn 为您提供了原因,但还有一些可能有用的信息:

您可以使用dict带有值的键和原始列表中的位置作为值:

d = dict( (val, idx) for idx, val in enumerate(items) )
# or {val:idx for idx, val in enumerate(items)} in 2.7+
print d.keys() # unique values: [3, 14, 6]
print sorted(d) # unique values in order [3, 6, 14]
print sorted(d, key=d.get) # unique values in original order (based on last occurence of key [6, 3, 14]

根据第一次出现,获得原始订单需要做更多的工作:

d = {}
for idx, val in enumerate(items):
    d.setdefault(val, idx)
于 2012-11-16T09:01:06.453 回答