这是我的代码:我使用 set() 并返回 [3, 14, 6]
items = [3, 6, 3, 3, 14]
set(items)
>>> set([3,14,6])
我的问题是 set 函数如何组织它的值输出。如果我们考虑一下,3 是第一个数字,6 是列表中的第二个数字,那么它应该输出 [3,6,14] 吗?
集合是无序的。从文档中:
作为无序集合,集合不记录元素位置或插入顺序。
像字典一样,排序是基于存储键的哈希值。您不能依靠这种明显的顺序来保持稳定。
如果您对底层数据模型感兴趣,底层数据结构称为Hash Table,但在集合中只存储键,值留空。
@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)