Python en []
bir dizide değil, bir bağlantılı liste olarak uygulanmaktadır. Yeniden boyutlandırma O (n) olmasına rağmen, eksi O (1) amortize edilir, çünkü yeniden boyutlandırmalar çok nadiren gerçekleşir. Bunun nasıl çalıştığını bilmiyorsanız, bu Wikipedia entry on dynamic arrays'u okuyun. Python'un listesi her seferinde 2 kat artmaz, bundan biraz daha karmaşıktır, ancak genişletmeler hala eklenmiş Oortifikasyonu yapmak için tasarlanmıştır (1). n
ürün taşınması gerekir, çünkü orta takma
Ancak, her zaman için etkisiz bir O (n) 'dir.
Tuplelar listeden daha hızlı değil - yalnızca başlık (*) altındaki değişmez listelerdir.
Sözlük testinizle ilgili olarak: tam uygulamanıza bağlı olarak, bir listedeki önbelleğe alma bir dikte ile olduğundan daha hızlı olacaktır. Ancak, Python'un dikteleri son derece optimize edildi ve özellikle küçük miktarlarda tuşlar harika performans gösterecek.
PyObject *
PyList_GetItem(PyObject *op, Py_ssize_t i)
{
if (!PyList_Check(op)) {
PyErr_BadInternalCall();
return NULL;
}
if (i < 0 || i >= Py_SIZE(op)) {
if (indexerr == NULL)
indexerr = PyString_FromString(
"list index out of range");
PyErr_SetObject(PyExc_IndexError, indexerr);
return NULL;
}
return ((PyListObject *)op) -> ob_item[i];
}
Ve bu tuple en geçerli::
PyObject *
PyTuple_GetItem(register PyObject *op, register Py_ssize_t i)
{
if (!PyTuple_Check(op)) {
PyErr_BadInternalCall();
return NULL;
}
if (i < 0 || i >= Py_SIZE(op)) {
PyErr_SetString(PyExc_IndexError, "tuple index out of range");
return NULL;
}
return ((PyTupleObject *)op) -> ob_item[i];
}
Gördüğünüz gibi, bunlar'
(*) İşte liste en Python 2.6 C fonksiyonunu "öğe olsun" var neredeyse tamamen aynı. Sonunda, bazı tür ve sınır kontrolünden sonra, bir indeksle basit bir işaretçi erişimi.
[Referans: Python documentation on Time Complexity for data type operations]
Sorunuzdaki "listeden" bahsetmek yerine "bağlantılı liste" demek istemiyor musunuz? – MAK