直到现在,当我将len
函数用于各种容器类型(list
现在说类型)时,我假设每个容器类型都有一个字段成员,用于存储该特定对象的长度。来自 Java,这使得很多感觉。但是当我想起来时,我不认为这是真的,这让我感到困惑。
每当我在len
实现的对象上使用该函数时__length__
,它是通过迭代对象的元素来计算长度,还是以某种方式立即返回长度?
这个问题实际上来自使用dict
内置类型。我在字典中添加了一些元素(其中很多),最终我需要获取字典中元素的数量,所以因为我不确定len
函数的时间复杂度是多少,所以我决定将元素计算为我插入它们......但我不确定这是解决我问题的正确方法。
这是我的问题的示例代码:
d = {}
count = 0
for i in range(10 ** 6):
d[i] = True
count += 1
VS
d = {i: True for i in range(10 ** 6)}
count = len(d)
第二个解决方案对我来说看起来更好(并且更短)......而且我知道理论上时间复杂度是相同的,无论len
函数是否是即时的,在第二个解决方案中,我担心它会迭代两次到 10 ** 6 (第一个用于字典理解,第二用于长度计算)。
请启发我。