2015-06-21 25 views
0

更换列表的元素,为恩:成本在使用python字符串列表蟒蛇

list_str = ['aa', 'bb', 'abc']. 

什么是替换列表的元素的成本/复杂性,如下所示:

list_str[i] = 'xyz' 

(假设该列表的长度为ñ,和一个字符串的长度至多为

+1

它是[O(1)](https://wiki.python.org/moin/TimeComplexity#list)。请注意,列表仅包含对象的引用,而不包含对实际对象的引用。 –

+2

有[TimeTable](https://wiki.python.org/moin/TimeComplexity),这可以帮助你。你可能正在寻找一个'Set Item'行。 – soon

+0

如果有一种比简单赋值更好的方法,为什么Python本身不使用它? – Kasramvd

回答

1

使用简单的测试,这似乎是恒定的时间 -

In [1]: list_str = ['aaa' for _ in range(100000)] 

In [2]: %timeit list_str[0] = 'aab' 
10000000 loops, best of 3: 77.7 ns per loop 

In [3]: %timeit list_str[9999] = 'aab' 
10000000 loops, best of 3: 77.2 ns per loop 

In [4]: %timeit list_str[99999] = 'aab' 
10000000 loops, best of 3: 78.7 ns per loop 

In [5]: %timeit list_str[9] = 'aab' 
10000000 loops, best of 3: 77.7 ns per loop 
0

替换元素的代价与列表的长度无关,而与字符串的长度无关。在Python列表中只包含对象的引用。所以基本上,替换元素是覆盖大小指针的内存部分。

0

由于CPython将列表作为数组实现,因此像l[i] = x这样的操作将采用常量(O(1))时间。

见行动,这里的表:https://wiki.python.org/moin/TimeComplexity

+1

CPython中的列表实现为数组,而不是双向链接列表 – 6502

+0

列表以Python中的数组实现。 –

+0

啊,谢谢,会解决的。 –

0

O(1)的时间复杂度由指数列表中的

来替换元素
0

Python中的列表被实现为动态分配指向所包含值的指针数组。

用另一个替换元素只是指针调整和引用计数调整,并需要一个恒定的时间(独立于列表的大小)。

+0

这是由python规范保证是真实的,还是它是如何在CPython中实现的? –

+0

@EricAppelt:什么官方的Python规范? – 6502

+0

好点 - 我想我在问什么是Python语言参考中的任何内容,这意味着'list'在某种意义上需要是连续的数组。我没有看到任何暗示这一点的事情,但我可能错过了一些东西。 –