【问题标题】:python reordering of list elements with conversion to setpython重新排序列表元素并转换为set
【发布时间】:2021-01-21 20:17:11
【问题描述】:

我了解 Python 集没有排序。

列表的顺序在转换为集合时不会被保留

我的问题是:为什么列表的元素在转换时会重新排序(在某些实现中)。

在转换过程中重新排序元素似乎是一个额外的操作。

如果不出意外,保持顺序似乎不会有太多开销(为方便起见)。

【问题讨论】:

  • 也许这篇文章能帮上忙 - stackoverflow.com/questions/9792664
  • 没有。我知道集合没有顺序(在发布问题之前,我实际上尽可能多地研究了 Stackoverflow 论坛)。

标签: list set


【解决方案1】:

那是因为集合基于Hash Table 数据结构,其中记录使用哈希键存储在存储桶中,并且项目的顺序(打印或转换为列表时)取决于哈希,但在内部顺序并不重要.所以它并没有真正费心改变顺序,它只是添加项目并为其创建一个哈希索引。当您打印集合时,它可能会根据哈希的字典顺序或类似的顺序打印。

从下面可以看出,从集合创建列表时,这些项目的哈希顺序相同。

>>> s=set([5,4,3,7,6,2,1,0])
>>> s
{0, 1, 2, 3, 4, 5, 6, 7}
>>> list(s)
[0, 1, 2, 3, 4, 5, 6, 7]

【讨论】:

  • 谢谢。我明白你的解释,但仍然不明白为什么从有序列表转换为集合会导致重新排序。
  • 如果有序列表被插入值修改,可能会导致存储在哈希表中的成员乱序(但仍按顺序键控)。
猜你喜欢
  • 1970-01-01
  • 2023-01-27
  • 2018-05-08
  • 1970-01-01
  • 2021-09-12
  • 2011-03-04
  • 1970-01-01
  • 1970-01-01
  • 2019-04-23
相关资源
最近更新 更多