【问题标题】:How to sort a set in python? [duplicate]如何在python中对集合进行排序? [复制]
【发布时间】:2019-03-28 02:09:36
【问题描述】:

我正在尝试通过向其中添加元素来对 python 中的集合进行排序。我尝试使用 sorted() 方法,但它将我的集合转换为列表。我需要对我的元素进行排序并将其作为一个集合打印出来。我该怎么做?

我尝试使用 sorted() 方法并获得了一个列表。试图将列表放入一个集合中。但是,没有收到所需的结果

a={}
a=set()
a.add(1)
a.add(-1)
a.add(0)
a.add(4)
a.add(-3)
print(a)

预期结果: {-3, -1, 0, 1, 4} 实际结果: {0、1、4、-3、-1}

【问题讨论】:

  • 集合没有顺序,如果你想要一个有序的集合,列表可能是个好方法
  • set 是无序的。他们没有订单。如果您愿意,可以在 Python 3.7+ 中使用 OrderedDict 或仅使用 dict
  • @Tomothy32 在这里请注意,Python3.6 及更高版本中的dict 仅保留CPython 实现中的插入顺序。
  • @mttpgn 在 3.6 中,它是一个 CPython 实现细节。在 3.7+ 中,它是标准的一部分。

标签: python set


【解决方案1】:

你不能

阅读python documentation

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

强调我的。

这意味着您将永远无法对集合中的项目进行排序*。

至少,对于“正常”的集合,你不能。你最好找第三方库(默认字典和collections.OrderedDict),因为我不认为python有内置的有序集,至少collections没有。

*嗯,不是从不,我知道python的早期版本没有排序字典,现在他们有。但至少在当前版本(python 3.7)中,没有有序集。

无论如何,字典的工作方式与集合类似。在字典中,你不能有两次相同的键,就像在一个集合中你不能有两次相同的项目。因此,如果您使用字典的键并忽略这些键的值,collections.OrderedDict 可能对您有用。从 Python 3.7 开始,即使是基本字典(使用 dict() 创建的字典)也可以使用。

>>> a = dict()
>>> a[1] = None
>>> a[-1] = None
>>> a[0] = None
>>> a[4] = None
>>> a[-3] = None
>>> print(a.keys())
dict_keys([1, -1, 0, 4, -3])

【讨论】:

  • collections.OrderedDict
  • @Tomothy32,正如你所说的collections.OrderedDict,而不是collections.OrderedSet
  • 但是,字典可以作为集合使用。实现非常相似。
  • @Tomothy32,是的,但是 OP 询问了有序集合,而不是类似于有序集合的东西。这就是为什么我说它不存在有序集合。
  • 这很公平。顺便说一句,3.7 中的字典在所有实现中都是排序的。
猜你喜欢
  • 2020-09-16
  • 1970-01-01
  • 2017-08-14
  • 2017-11-01
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多