最近我注意到,当我转换一个列表来设置元素的顺序是改变的,并按字符排序。
想想这个例子:
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
我的问题是
为什么会这样?
如何才能在不丢失初始顺序的情况下进行设置操作(特别是设置差异)?
如果愿意,可以删除重复的值并保持插入的列表顺序
lst = [1,2,1,3]
new_lst = []
for num in lst :
if num not in new_lst :
new_lst.append(num)
# new_lst = [1,2,3]
如果你想要的是“order”,不要使用“sets”来删除重复,
使用集合进行搜索。
X在列表中
花费O(n)时间
在哪里
集合中的X
在大多数情况下需要O(1)时间*
正如在其他答案中指出的那样,集合是不保留元素顺序的数据结构(和数学概念)
然而,通过使用集合和字典的组合,你可以实现任何你想要的-尝试使用这些片段:
# save the element order in a dict:
x_dict = dict(x,y for y, x in enumerate(my_list) )
x_set = set(my_list)
#perform desired set operations
...
#retrieve ordered list from the set:
new_list = [None] * len(new_set)
for element in new_set:
new_list[x_dict[element]] = element