You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何set函数[*set(nums)]对不同输入表现出不同行为?

为什么[*set(nums)]对不同输入表现出不同顺序?

这是因为Python里的set(集合)本身是无序容器,它既不保留元素的插入顺序,也不会自动按数值大小排序。当你用[*set(nums)]把集合转成列表时,列表的顺序完全由集合内部的存储逻辑决定,核心原因和哈希表的工作机制有关:

  • Python的集合基于哈希表实现,每个元素会根据自身的哈希值被分配到哈希表的对应位置。
  • 对于整数类型来说,它的哈希值就是自身(比如hash(1) == 1、hash(100) == 100、hash(1000) == 1000)。
  • 哈希表会根据哈希值计算元素的存储位置,不同哈希值的元素会被放到不同位置,所以当输入元素的哈希值差异较大时,集合内部的存储顺序就会变化,转成列表后的结果自然也就不一样。

结合你的例子来看:

  • 输入[1,2,2,100]时,元素哈希值为1、2、100,哈希表分配的位置让它们转成列表后呈现[1,2,100]的顺序。
  • 输入[1,2,2,1000]时,1000的哈希值远大于前两个元素,对应的存储位置在集合的最前端,所以转成列表后就变成了[1000,1,2]。

如果需要固定顺序,比如保留插入顺序或者按数值排序,可以用这些方法:

  • 保留插入顺序:list(dict.fromkeys(nums))(Python 3.7及以上版本的字典会保留插入顺序)
  • 按数值排序:sorted(set(nums))

内容的提问来源于stack exchange,提问作者Priyank Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 17:01:09