【问题标题】:sort set into list in python in order it was first appended排序设置到python中的列表中,以便它首先被附加
【发布时间】:2017-11-20 16:24:34
【问题描述】:

我想按顺序循环浏览我的集合。我知道集合是无序的,并且必须将其排序到一个列表中,并且通过对集合进行数字排序来做到这一点,但是我现在想尝试按照数字首先附加到集合的顺序对其进行排序。这是否可以在创建集合后执行,或者这是否需要我使用数字来填充集合以外的其他内容?顺序需要保持数字首先附加到集合中的顺序

【问题讨论】:

  • 不,这是不可能的,除非你用额外的信息来扩充你要添加到集合中的项目
  • 您需要使用集合而不是列表吗?
  • 一开始并不完全需要使用集合,可能可以通过使用列表来绕过它,但只有在唯一时才填充。不是该问题的完全重复,但我可能会使用类似的解决方案。我如何可能向集合中添加额外信息,例如给每个项目一个排名还是什么?

标签: python list sorting set append


【解决方案1】:

最简单的方法可能是使用ordereddict 的键来存储和检索集合中的元素,而不用某种排序来增加插入的元素,并将虚拟值映射到这些键。

from collections import OrderedDict
seq = [6, 7, 4, 3, 2, 1, 5, 0]
my_set = OrderedDict()
for elt in seq:
    my_set[elt] = True

您现在可以按照插入的顺序迭代或检索密钥。您可以获得与集合相同的属性,即唯一性、快速插入、检索和包含;你没有得到的是特定的集合操作,比如对称差等......

【讨论】:

  • my_set[elt] 选择一个真实值可能是一个更好的主意。
  • 也许,我们对用例知之甚少。你为什么这么认为?
  • 我认为这会很好。我特别需要集合的独特性。我不明白为什么需要字典的值?我认为只使用密钥就可以了。
  • my_set[elt]=True 将明确区分作为字典中键的对象和非键对象。使用my_set[elt]=Nonemy_set.get() 将为每个对象返回None
  • 是的,谢谢@EricDuminil,这是有道理的。我会修改我的答案。
【解决方案2】:

不,一组不是有序的。无法找出元素附加到集合中的顺序。 但是,您可以为此使用列表。每次将元素添加到集合时,也将其附加到列表中,然后您就知道顺序了。 但要注意:一个集合只包含一次相同的元素,而一个列表可以包含多次相同的元素。我不确定这会如何影响您使用此功能。 如果元素尚未在列表中,您可以通过仅附加到列表来解决此问题。

s = set()
l = []

elem = 1
if elem not in l:
    l.append(elem)
s.add(elem)

print(s)
print(l)

【讨论】:

  • 您也可以创建一个列表并在必要时使用set(l)将其转换为一个集合
  • 但是如果我要转换成一个集合,那么如果我之后要循环遍历这个集合,我就会再次失去排序。如果附加项目的顺序丢失,我认为我根本不能在这里使用集合,所以我认为唯一的列表可以完成这项工作
  • 是的,列表绝对是最合适的。如果有必要,我们只是建议转换为一组。 (例如,您可以转换为一个集合以利用其特定功能而无需摆脱原始列表)
猜你喜欢
  • 2023-03-24
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-26
相关资源
最近更新 更多