gpt4 book ai didi

python - 为什么排序记录为采用可迭代而不是集合?

转载 作者:行者123 更新时间:2023-12-04 23:35:29 26 4
gpt4 key购买 nike

为什么 Python 的 sorted 有更深层次的含义吗?被记录为采用可迭代的(可能是无限的)而不是集合(其大小)?

例如,这将永远运行:

# DO NOT RUN
import itertools

for item in sorted(itertools.count()):
print(item)

我知道他们想要允许 sorted处理集合的可迭代对象而不是集合本身,但保证引发 collections.abc 的可迭代对象之间没有根本区别(可能反射(reflect)在 StopIteration 中)和可能是无限的迭代?

最佳答案

之所以如此记录是因为它没有使用 __len__工作,虽然你是对的,因为它应该要求有限的 Iterable因为有意义。请注意,一个 Iterable可以是有限的但不支持 __len__ , 与 Collection 相反. Python 没有明确区分有限和不确定 Iterable s。

考虑以下 玩具 例子:

x = iter(range(10, 0, -1))

len(x)
# TypeError: object of type 'range_iterator' has no len()

# BUT
y = sorted(x)
print(y)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

关于python - 为什么排序记录为采用可迭代而不是集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59224404/

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