为什么list(set(a + b))返回有序列表?并且它总是返回有序列表吗?

时间:2019-05-14 14:04:41

标签: python python-3.x set

我有两个带有整数的列表。然后,我结合列表中的元素来创建没有重复的新列表。我希望对新列表进行排序。但是当我尝试结合使用set时,它将返回一个有序列表。我想知道为什么返回有序列表?总是真的吗?

我尝试使用不同的list值返回了有序列表

a = [1,1,2,3,5,8,13,14,15,16]
b = [1,1,2,3,4,5,6,7,8,9,10,11,12]
c = list(set(a+b))
print(c)

结果是:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]

2 个答案:

答案 0 :(得分:2)

由于集合是无序的,因此将集合投射到列表后获得的列表不可能被排序。

来自文档:https://docs.python.org/3/tutorial/datastructures.html#sets

  

集合是没有重复元素的无序集合。

这是一个非常简单的示例,其中order失败

a = [1,5]
b = [1,10,20]
c = list(set(a+b))
print(c)
#[1, 10, 20, 5]

要对组合列表进行排序,只需使用sorted

In [2]: a = [1,5]                                                                                                                             

In [3]: b = [1,10,20]                                                                                                                         

In [5]: c = list(set(a+b))                                                                                                                    

In [6]: sorted(c)                                                                                                                             
Out[6]: [1, 5, 10, 20]

答案 1 :(得分:2)

Python中的集合没有顺序:

  

Python还包括集合的数据类型。集合是没有重复元素的无序集合。基本用途包括成员资格测试和消除重复条目。集合对象还支持诸如并集,交集,差和对称差之类的数学运算。

(source)

这里是示例:

a = list(reversed([1,1,2,3,5,4498576,8,13,14,15,16]))
b = [1,345,132,36465,7,8,9,10,11,12]
c = list(set(a+b))
print(c)

打印:

[1, 2, 3, 132, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 4498576, 36465, 345]

如果您希望对列表进行排序,则应该手动进行:

c.sort()
print(c)

[1, 2, 3, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 132, 345, 36465, 4498576]