最近我注意到,当我将 list
转换为 set
时,元素的顺序发生了变化并按字符排序。
考虑这个例子:
x=[1,2,20,6,210]
print(x)
# [1, 2, 20, 6, 210] # the order is same as initial order
set(x)
# set([1, 2, 20, 210, 6]) # in the set(x) output order is sorted
我的问题是 -
- 为什么会这样?
- 如何在不丢失初始顺序的情况下进行设置操作(尤其是设置差异)?
原文由 d.putto 发布,翻译遵循 CC BY-SA 4.0 许可协议
A
set
是一个无序数据结构,所以它不保留插入顺序。这取决于您的要求。如果你有一个普通的列表,并且想在保留列表顺序的同时删除一些元素集,你可以使用列表理解来做到这一点:
如果你需要一个既支持 快速成员资格测试 又支持 插入顺序保存的 数据结构,你可以使用 Python 字典的键,从 Python 3.7 开始保证保存插入顺序:
b
真的不需要在这里订购——你也可以使用set
。请注意,a.keys() - b.keys()
将设置差异返回为set
,因此它不会保留插入顺序。在旧版本的 Python 中,您可以使用
collections.OrderedDict
代替: