Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,按照第一次追加的顺序将集合排序到列表中_Python_List_Sorting_Set_Append - Fatal编程技术网

在python中,按照第一次追加的顺序将集合排序到列表中

在python中,按照第一次追加的顺序将集合排序到列表中,python,list,sorting,set,append,Python,List,Sorting,Set,Append,我想按顺序在我的布景中循环。我知道集合是无序的,必须将其排序到一个列表中,并通过对集合进行数字排序来实现这一点,但我现在想尝试按照数字首先附加到集合中的顺序进行排序。在创建集合后是否可以这样做,或者这是否需要我输入数字来填充集合以外的内容?订单将需要保持编号第一次添加到集合的顺序否,集合未排序。无法确定元素附加到集合中的顺序。 但是,您可以使用一个列表。每次向集合中添加元素时,也会将其附加到列表中,这样就知道了顺序。 但是要注意:一个集合只包含一次相同的元素,而一个列表可以多次包含相同的元素。我

我想按顺序在我的布景中循环。我知道集合是无序的,必须将其排序到一个列表中,并通过对集合进行数字排序来实现这一点,但我现在想尝试按照数字首先附加到集合中的顺序进行排序。在创建集合后是否可以这样做,或者这是否需要我输入数字来填充集合以外的内容?订单将需要保持编号第一次添加到集合的顺序

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

s = set()
l = []

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

print(s)
print(l)

除了通过某种排序来增加插入的元素之外,最简单的方法可能是使用
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

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

不,除非你用额外的信息增加要添加到集合中的项目,否则这是不可能的。可能重复的是,你需要使用集合而不是列表吗?首先不完全需要使用集合,可能通过使用列表来绕过它,但只有在唯一的情况下才能填充。这个问题不是完全重复,但我可能会使用类似的解决方案。我如何可能向集合中添加额外的信息,例如,给每个项目一个等级或什么?您也可以创建一个列表,并在必要时使用
set(l)
将其转换为集合,但如果我要转换为集合,那么如果之后要循环遍历集合,我将再次失去顺序。如果附加项的顺序丢失,我认为我根本不能在这里使用集合,因此我认为一个唯一的列表可以完成这项工作是的,列表显然是最合适的。我们只是建议在必要时转换成一个集合。(例如,您可以转换为集合以利用其特定功能,而无需删除原始列表)为
my_set[elt]
选择真实值可能是一个更好的主意。也许,我们对该用例知之甚少。你为什么这么认为?我认为这会很有效。我特别需要集合的唯一性。我不明白为什么字典需要一个值?我认为只使用键就可以了。
my_set[elt]=True
可以明确区分dict中的键对象和非键对象。使用
my_set[elt]=None
my_set.get()
将为每个对象返回
None
。是的,谢谢@EricDuminil,这很有意义。我会修正我的答案。