gpt4 book ai didi

python - 为什么Python的set()在某些情况下要对列表进行排序?

转载 作者:行者123 更新时间:2023-12-02 01:49:00 25 4
gpt4 key购买 nike

我对本例中 Python set() 的行为感到困惑:

random_number_list = [randint(1, 10) for _ in range(10)]
# This will be sorted!
unique_numbers = set(random_number_list)

print(
f"random_number_list/unique_numbers with same upper bound for randint() and range():\n{random_number_list=}\n{unique_numbers=}\n"
)

random_number_list = [randint(1, 100) for _ in range(10)]
# This will not be sorted.
unique_numbers = set(random_number_list)

print(
f"random_number_list/unique_numbers with different upper bound for randint() and range():\n{random_number_list=}\n{unique_numbers=}\n"
)

如果列表的长度和 randint() 的上限是,则 set() 似乎正在对 random_number_list 进行排序相同:

➜  ch-2 python --version
Python 3.10.0
➜ ch-2 python find_k_smallest.py
random_number_list/unique_numbers with same upper bound for randint() and range():
random_number_list=[10, 1, 2, 5, 5, 7, 8, 8, 2, 8]
unique_numbers={1, 2, 5, 7, 8, 10}

random_number_list/unique_numbers with different upper bound for randint() and range():
random_number_list=[35, 1, 17, 26, 17, 74, 26, 11, 44, 13]
unique_numbers={1, 35, 74, 11, 44, 13, 17, 26}

docs状态:

A set object is an unordered collection of distinct hashable objects.

这是怎么回事?为什么 set() 在某些情况下对 random_number_list 进行排序,而在其他情况下则不然?

编辑这些问题都不能解决我的问题:

最佳答案

真正回答你的问题。集合的许多实现都使用类似于哈希表的实现。项目被散列并根据该散列值放入“数组”中。

请注意,对于小整数,hash(x) == x。因此,1 将进入插槽 1,2 将进入插槽 2,3 将进入插槽 3,依此类推。然后,当读取元素时,您将真正对元素进行排序。

但是,如果您的整数大于数组大小,那么它们在数组中的位置将以数组大小为模。它们将不再被排序。

再说一次,我并没有真正研究过 Python 的实现。这只是对可能发生的情况的可能解释。

关于python - 为什么Python的set()在某些情况下要对列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70557921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com