2010-03-08 19 views
11

¿len(list) calcula la longitud de la lista cada vez que se invoca o devuelve el valor del contador incorporado?
tengo un contexto en el que tengo que comprobar la longitud de una lista cada vez a través de un bucle, como:En python, ¿qué hace len (list)?

listData = [] 
for value in ioread(): 
    if len(listData)>=25: 
     processlistdata() 
     clearlistdata() 
    listData.append(value) 

debo comprobar len(listData) en cada iteración, o debería tener un contador de la longitud de la lista ?

+4

Estoy 99.9% seguro de que cualquier tipo de secuencia en idiomas de nivel superior almacenará su longitud. Las funciones 'len' (o' strlen' o 'length') en Python, Perl y Ruby (y otros idiomas similares) nunca deberían tomar O (N) tiempo. –

+0

Reemplazaría su código por 'para el fragmento en mero (ioread(), 25): proceso (fragmento)' Donde 'mero()' se define similar a http://docs.python.org/library/itertools. html # recetas (es posible que desee reemplazar 'izip_longest()' por 'izip()' para colocar los últimos valores como lo hace su código). – jfs

+0

¿Mide las dos versiones para ver cuál es realmente más rápido? Es más fácil usar 'timeit' y publicar sus resultados para que podamos comentar sobre ellos. –

Respuesta

16

Probablemente debe tener en cuenta, si le preocupa el rendimiento de esta operación, esa "lista" en las matrices dinámicas de Python are really. Es decir, no están implementados como listas vinculadas, que generalmente tiene que "recorrer" para calcular una longitud (a menos que esté almacenado en un encabezado).

Dado que ya necesitan almacenar información de "contabilidad" para gestionar la asignación de memoria, la longitud también se almacena.

1
Help on built-in function len in module __builtin__: 

len(...) 
    len(object) -> integer 

    Return the number of items of a sequence or mapping. 

sí, len(list) devuelve la cantidad de elementos de la lista. Es posible que desee describirlo con más detalle, proporcionando los archivos/resultados de entrada necesarios para ayudarlo a comprender mejor lo que desea hacer.

+8

El OP está preocupado acerca de si esta longitud se volverá a calcular cada vez que se solicite. –

+0

creo que también depende de lo que haga ioread(). – ghostdog74

0

len(list) devuelve la longitud de una lista. Si lo cambias, deberás verificar su longitud en cada iteración. O usa un contador.

0

len (lista) devuelve la longitud de la lista. Cada vez que lo llame, devolverá la longitud de la lista como es actualmente. Puede configurar un contador tomando inicialmente la lista y agregando 1 a la variable cada vez que se agrega algo a la lista.

Cuestiones relacionadas