更換列表的元素,爲恩:成本在使用python字符串列表蟒蛇
list_str = ['aa', 'bb', 'abc'].
什麼是替換列表的元素的成本/複雜性,如下所示:
list_str[i] = 'xyz'
(假設該列表的長度爲ñ,和一個字符串的長度至多爲米)
更換列表的元素,爲恩:成本在使用python字符串列表蟒蛇
list_str = ['aa', 'bb', 'abc'].
什麼是替換列表的元素的成本/複雜性,如下所示:
list_str[i] = 'xyz'
(假設該列表的長度爲ñ,和一個字符串的長度至多爲米)
使用簡單的測試,這似乎是恆定的時間 -
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
替換元素的代價與列表的長度無關,而與字符串的長度無關。在Python列表中只包含對象的引用。所以基本上,替換元素是覆蓋大小指針的內存部分。
由於CPython將列表作爲數組實現,因此像l[i] = x
這樣的操作將採用常量(O(1))時間。
O(1)的時間複雜度由指數列表中的
來替換元素Python中的列表被實現爲動態分配指向所包含值的指針數組。
用另一個替換元素只是指針調整和引用計數調整,並需要一個恆定的時間(獨立於列表的大小)。
這是由python規範保證是真實的,還是它是如何在CPython中實現的? –
@EricAppelt:什麼官方的Python規範? – 6502
好點 - 我想我在問什麼是Python語言參考中的任何內容,這意味着'list'在某種意義上需要是連續的數組。我沒有看到任何暗示這一點的事情,但我可能錯過了一些東西。 –
它是[O(1)](https://wiki.python.org/moin/TimeComplexity#list)。請注意,列表僅包含對象的引用,而不包含對實際對象的引用。 –
有[TimeTable](https://wiki.python.org/moin/TimeComplexity),這可以幫助你。你可能正在尋找一個'Set Item'行。 – soon
如果有一種比簡單賦值更好的方法,爲什麼Python本身不使用它? – Kasramvd