Python含负整数的set转list默认逆序?取第二大数异常原因咨询
问题核心原因
Python 的 set 是基于哈希表实现的无序集合,本身没有任何默认排序逻辑,你观察到的元素顺序完全是哈希存储的偶然结果,和数值大小、正负属性没有任何必然关联。
具体说明
- 整数在 Python 中的哈希值等于其本身,哈希表会根据哈希值计算元素的存储槽位,你测试的案例中
57的存储槽位刚好排在-57前面,只是巧合,不具备普适性。你可以尝试测试set([-1, 3, -2, 4]),输出的元素顺序不会按数值逆序排列。 - 注意版本差异:Python 3.7+ 仅对
dict实现了插入顺序保留,set到目前为止的所有版本都没有承诺保留任何顺序,依赖set的元素顺序编写逻辑是完全不可靠的。
正确的第二大值实现逻辑
你想要实现的去重后取第二大值的需求,应该先对去重后的结果显式排序,再做索引取值,示例代码如下:
n = int(input()) arr = list(map(int, input().split())) unique_arr = sorted(set(arr), reverse=True) # 兼容所有元素相同的边界情况 print(unique_arr[1] if len(unique_arr)>=2 else unique_arr[0])
内容的提问来源于stack exchange,提问作者Gagan K.N.
相关产品推荐
相关产品推荐

