168 votos

Lista Python vs Array - cuándo utilizar?

Si va a crear una matriz 1d, se puede implementar como una lista, o bien utilizar el módulo de 'array' en la stdlib. Siempre he utilizado las listas para las matrices 1d.

¿Cuál es la razón o circunstancia en la que me gustaría utilizar el módulo de matriz en lugar?

¿Es para la optimización del rendimiento y la memoria, o me estoy perdiendo algo obvio?

211voto

Dan Puntos 18831

Básicamente, las listas de Python son muy flexibles y pueden almacenar completamente heterogéneos, datos arbitrarios, y que puede ser añadido de forma muy eficiente, en amortizado de tiempo constante. Si usted necesita para reducir y aumentar su matriz de tiempo de manera eficiente y sin problemas, son el camino a seguir. Pero ellos utilizan mucho más espacio del que C matrices.

La array.array tipo, por otro lado, es sólo un envoltorio de C matrices. Puede contener sólo datos homogéneos, todos del mismo tipo, y para que se utiliza sólo sizeof(one object) * length bytes de memoria. En su mayoría, se debe usar cuando es necesario exponer una matriz C a una extensión o una llamada al sistema (por ejemplo, ioctl o fctnl). También es una buena manera para representar una variable de cadena (array('B', bytes)) hasta que la realidad se convierte en disponible en Python 3.0.

Sin embargo, si usted desea hacer matemáticas en un homogénea de la matriz de datos numéricos, entonces estás mucho mejor con NumPy, que automáticamente se puede vectorización de las operaciones en el complejo de múltiples dimensiones de las matrices.

Para hacer corta una larga historia: array.array es útil cuando usted necesita un homogénea de la C matriz de datos, por razones otras que haciendo matemáticas.

38voto

André Puntos 4833

Para casi todos los casos la lista normal es la elección correcta. El módulo de matrices es más como un envoltorio fino sobre los arrays de C, que le dan clase de contenedores inflexible de tipos (ver docs ), con acceso a más tipos C-like como signed / unsigned short o doble, que no son parte de la incorporada tipos -en. Yo diría que el módulo de uso de las matrices sólo si realmente lo necesita, en los demás casos se pegan con las listas.

13voto

Jason Baker Puntos 56682

El módulo array es una de esas cosas que usted probablemente no tiene una necesidad si usted no sabe por qué debería utilizar (y tomar nota de que no estoy tratando de decir que de una manera arrogante!). La mayoría del tiempo, la matriz se usa el módulo de interfaz con el código de C. Para dar una respuesta directa a su pregunta sobre el rendimiento:

Las matrices son más eficientes que las listas para algunos usos. Si necesita asignar una matriz que usted SABE que no va a cambiar, entonces las matrices puede ser más rápido y usa menos memoria. GvR tiene una optimización de la anécdota en la que la matriz del módulo, viene a ser el ganador (lectura larga, pero vale la pena).

Por otro lado, parte de la razón por la que las listas de comer más de la memoria de matrices es porque python asignará una serie de elementos extra cuando todos los elementos asignados. Esto significa que añadiendo elementos a las listas es el más rápido. Así que si usted planea en la adición de elementos de una lista es el camino a seguir.

TL;DR yo sólo uso una matriz si usted tuvo una excepcional optimización de la necesidad o usted necesita para hacer de interfaz con el código C (y no se puede utilizar pyrex).

7voto

Ben Hoffstein Puntos 44398

Mi entendimiento es que las matrices se almacenan de manera más eficiente (es decir, como bloques contiguos de punteros de memoria frente a objetos de Python), pero yo no tengo conocimiento de ninguna ventaja de rendimiento. Además, con las matrices debe almacenar primitivas del mismo tipo, mientras que las listas pueden almacenar nada.

4voto

Hortitude Puntos 3963

Array sólo puede utilizarse para tipos específicos, mientras que las listas se pueden usar para cualquier objeto.

Las matrices pueden también sólo los datos de un tipo, mientras que una lista puede tener entradas de diferentes tipos de objetos.

Las matrices son también más eficientes para algunos cálculos numéricos.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X