2015-06-21 28 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'在某種意義上需要是連續的數組。我沒有看到任何暗示這一點的事情,但我可能錯過了一些東西。 –