这是我的代码: 我使用了set()并返回[3,14,6]
items = [3, 6, 3, 3, 14]
set(items)
>>> set([3,14,6])
我的问题是set函数如何组织它的值输出。如果我们考虑这个,3是第一个数字,6是列表中的第二个,那么它应该输出[3,6,14]吗?
答案 0 :(得分:2)
集合是无序的。来自documentation:
作为无序集合,集合不记录元素位置或插入顺序。
与词典类似,排序基于hashes of the stored keys。你不能依靠这种明显的顺序来保持稳定。
如果您对底层数据模型感兴趣,那么底层数据结构称为Hash Table,但是在集合中只存储密钥,值为空。
答案 1 :(得分: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)