Python列表实现

Python列表实现,python,c,Python,C,列表是如何用python实现的?我的意思是,如何才能在固定时间内附加一个元素,同时在固定时间内获取一个项目?有谁能告诉我如何在C中实现它吗?一个简单的实现是使用一个预先分配的缓冲区和一个元素数计数器。 当缓冲区被填满并且您想要追加元素时,您就可以分配一个更大的缓冲区(例如,两倍大的缓冲区),并将旧缓冲区的数据复制到新缓冲区中 因此,追加操作不是严格意义上的O(1),而是摊销的O(1),即平均为O(1)。你的问题太宽泛了。除非你有特别的问题,你应该在谷歌上查一下。是的,所有这些事情都可以在摊销的固

列表是如何用python实现的?我的意思是,如何才能在固定时间内附加一个元素,同时在固定时间内获取一个项目?有谁能告诉我如何在C中实现它吗?

一个简单的实现是使用一个预先分配的缓冲区和一个元素数计数器。 当缓冲区被填满并且您想要追加元素时,您就可以分配一个更大的缓冲区(例如,两倍大的缓冲区),并将旧缓冲区的数据复制到新缓冲区中


因此,追加操作不是严格意义上的O(1),而是摊销的O(1),即平均为O(1)。

你的问题太宽泛了。除非你有特别的问题,你应该在谷歌上查一下。是的,所有这些事情都可以在摊销的固定时间内完成,否则python怎么能做到呢?这应该会有所帮助:参见C源代码。听说过搜索引擎吗?尝试搜索“列表实现的比较”?然后,如果你不明白,回来问。请把你的问题限制在一个问题上。目前这个问题不适合本网站的格式。请阅读,特别是在上。它开始时是原来的两倍,但随后过度分配减少到大约1/8。数据并不总是需要被复制的,除非它需要被移动,这样就不会碰到其他使用过的内存。假设数组的大小不变,假设它是5,这就是我们开始的地方。然后我们有5个附件,之后是内存的分配和释放(与附件本身相比非常昂贵),再加上复制5个条目。然后,在另外5个附件之后,我们必须重新分配和复制10个条目。我一点也不知道你是如何得出O(1)的结论的。更像是O(n),不是吗?如果将大小增加一倍,则得到O(log(n))。@ClassStacker您最初的假设与不以恒定速率增长的列表完全无关。此外,他们也不需要像Petar所说的那样每次都复制所有对象,见我上面的评论。新大小不是加法常量而是乘法-例如,新大小是源代码中旧大小的2倍(或jamylak建议的1/8倍):增长模式是:0、4、8、16、25、35、46、58、72、88@彼塔:不总是2倍