Есть ли разница между append
и insert
в конце списка? Является ли insert
в конце списка операцией с постоянным временем?
nums = [1, 2, 3]
nums.append(4) # Time complexity: O(1)
nums.insert(len(nums), 5) # Time complexity: O(?)
Согласно статье TimeComplexity в Python Wiki, средний случай для append
равен O (1) , а средний случай для insert
- O (n). Однако в руководстве по Python упоминается что:
... и
a.insert(len(a), x)
эквивалентноa.append(x)
.
Я не уверен, что эквивалент означает эквивалент по функциональности или эквивалент по временной сложности. Кто-нибудь знает?
insert
не всегда находится в конце списка. - person Paritosh Singh   schedule 04.02.2020insert
O (1) в особом случае вставки в конец списка. - person Flux   schedule 04.02.2020n
во вставке - это фактически количество элементов, которые необходимо переместить. Если перемещать элементы не нужно, эту операцию можно проигнорировать. В любом случае это все равно будет временная сложность O (n) просто потому, что большая нотация O на самом деле не измеряет некоторую расплывчатую или даже точную временную сложность, это больше для описания того, как их требования к времени / пространству работы растут по мере увеличения размера ввода . Подробнее см. в Википедии. - person metatoaster   schedule 04.02.2020list.insert
всегда в среднем O (n), и что нотация большого O не делает конкретной адресации крайних случаев (таких как лучший или худший сценарий; в вашем случае операционная, которая может быть уменьшена к простомуlist.append
). - person metatoaster   schedule 04.02.2020append
амортизируется за O (1), а не за O (1). См. эту ветку - person metatoaster   schedule 04.02.2020