【问题标题】:Why list(set(a+b)) returns ordered list? And is it always returns an ordered list?为什么 list(set(a+b)) 返回有序列表?它总是返回一个有序列表吗?
【发布时间】:2019-05-14 14:04:41
【问题描述】:

我有两个整数列表。我结合列表的元素来创建新的列表而不重复。我希望对新列表进行排序。但是当我尝试使用 set 组合时,它会返回一个有序列表。我想知道为什么它返回一个有序列表?它总是正确的吗?

我尝试了不同的列表值,它返回了有序列表

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]

【问题讨论】:

  • 一个集合可以按照它喜欢的任何顺序保存它的元素,包括这个。如果您尝试使用更大范围的数字,您会发现结果不是按该顺序出现的情况。
  • 试试a=[8]b=[1]。你会发现list(set(a+b))=[8,1]

标签: python python-3.x set


【解决方案1】:

由于集合是无序的,因此将集合转换为列表后得到的列表不可能是有序的。

来自文档: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]

【讨论】:

  • 对不起,我是 Stackoverflow 的新手,所以我正在学习如何使用它!
  • 不用担心 :) 乐于助人 :)
【解决方案2】:

Python 中的集合是无序的:

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

(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]

【讨论】:

    猜你喜欢
    • 2014-11-13
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多