2013-04-27 14 views
10

Ich möchte wissen, wie len() funktioniert.How to Python count Liste Länge

Zählt es von Anfang bis Ende einer Liste jedes Mal, wenn ich len(), oder, da Liste auch eine Klasse ist, gibt len ​​() nur eine Variable im Listenobjekt zurück, die die Länge der Liste aufzeichnen?

auch, ich hoffe jemand kann mir sagen, wo ich den Quellcode dieser integrierten Funktionen wie ‚len()‘ finden ‚map()‘ usw.

+0

Ruft die Methode '__len__' des Listenobjekts auf. Sie können die Quelle hier sehen: http://svn.python.org/view/python/tags/r27/Objects/listobject.c?view=markup – Blender

+0

es verfolgt seine Länge, so dass es nicht jedes Mal neu erzählt .. –

+0

Und hier ist die Quelle für die Builtins: http://hg.python.org/releasing/2.7.4/file/9290822f2280/Python/bltinmodule.c#l928 – Blender

Antwort

16

herunterladen Python 2.7 Quellcode hier: http://www.python.org/getit/releases/2.7.4/

list in ./Include/listobject.h und ./Objects/listobject.c umgesetzt.

typedef struct { 
    PyObject_VAR_HEAD 
    /* Vector of pointers to list elements. list[0] is ob_item[0], etc. */ 
    PyObject **ob_item; 

    /* ob_item contains space for 'allocated' elements. The number 
    * currently in use is ob_size. 
    * Invariants: 
    *  0 <= ob_size <= allocated 
    *  len(list) == ob_size 
    *  ob_item == NULL implies ob_size == allocated == 0 
    * list.sort() temporarily sets allocated to -1 to detect mutations. 
    * 
    * Items must normally not be NULL, except during construction when 
    * the list is not yet visible outside the function that builds it. 
    */ 
    Py_ssize_t allocated; 
} PyListObject; 

list.__len__() berät nur ob_size, welcher Teil PyObject_VAR_HEAD ist. Dies macht len() eine konstante Zeitoperation für Listen.

+0

Sie sollten wahrscheinlich PyObject_VAR_HEAD einschließen, da dies am relevantesten ist. – jamylak

+0

Direkter Link zur Header-Datei Quelle: https://svn.python.org/projects/python/trunk/Include/listobject.h – hoju

1

Nun, Sie das finden können Dokumentation der eingebauten Funktionen here.

Der list Datentyp verfolgt die Anzahl der Elemente, die er enthält, len(list) ist eine O (1) -Operation.


für den Quellcode, können Sie den Quellcode von Python bei the download page finden.