list + =如何在Python中实现?

时间:2016-06-17 17:10:33

标签: python

它的时间和空间复杂度是多少?

我还没能在网络的其他地方找到权威的答案。

另外,不确定原因,但StackOverflow不允许我发布此问题,直到我在此框中写下更多文字。

2 个答案:

答案 0 :(得分:4)

l += other_thing大致相当于

l.extend(other_thing)

for thing in other_thing:
    l.append(thing)

在引擎盖下,列表存储了一个指向其元素的指针数组,通常在末尾有额外的空间以容纳未来的元素。如果列表具有空间,则追加元素包括指针副本和引用计数更新;如果列表超出了空间,则首先将数组复制到乘法较大的数组中。

+=操作的平均时间和摊销时间复杂度为O(len(other_thing));最坏情况下的时间复杂度为O(len(l) + len(other_thing))。各个元素的大小无关紧要。该操作可能需要O(len(l) + len(other_thing))空间来调整大小,尽管它使用的大部分空间都是l的一部分。

答案 1 :(得分:3)

python的源代码可以在github上免费获取,所以你可以随时查看它

static PyObject *
list_inplace_concat(PyListObject *self, PyObject *other)
{
    PyObject *result;

    result = listextend(self, other);
    if (result == NULL)
        return result;
    Py_DECREF(result);
    Py_INCREF(self);
    return (PyObject *)self;
}

你可以看到它只是调用了listextend,你可以看到https://wiki.python.org/moin/TimeComplexity的复杂性