2012-07-09 4 views
18

¿Hay problemas imprevistos en la mezcla de diferentes tipos en una lista de Python? Por ejemplo:¿Puedo mezclar tipos de forma segura en una lista de Python?

import random 
data = [["name1", "long name1", 1, 2, 3], 
     ["name2", "long name2", 5, 6, 7]] 
name, long_name, int1, int2, int3 = random.choice(data) 

Estoy usando este código para establecer aleatoriamente varios parámetros relacionados dentro de una función, pero a pesar de que Python soporta, estoy cuidado con los tipos de mezcla de este tipo en una lista. Dado que la lista de tipos de datos mixtos no se usará para ningún procesamiento además de la asignación de variables en sí misma (las variables que asigna a voluntad, pero no la lista en sí), supongo que está bien, pero quiero asegurarme de que esto no es un código secretamente problemático.

+1

Elemento de matriz técnica _are_ todo el mismo tipo - referencias (a objetos) –

+0

@gnibbler Buen punto. –

Respuesta

24

No, no hay problema, puede almacenar cualquier tipo dentro de un list a diferencia de los "viejos tiempos" cuando otros idiomas tenían matrices que solo querían un tipo de datos almacenados en ellos.

Desde listas también pueden almacenar otra lista, y otras estructuras de datos compuesto, junto con otras referencias a objetos, el procesamiento u iteración a través de la lista puede llegar a ser un poco más complejo debido a posibles múltiples capas, que apenas yendo a través de una matriz en una iteración simple de un solo nivel. Esto también está relacionado con shallow and deep copying.

Si el código que procesa las listas es consciente de esto, no puedo pensar en ningún problema debido a esta capacidad de almacenar cosas diferentes en una lista.

+0

Gracias. Sé que puedo * almacenar cualquier tipo de datos, pero quería asegurarme de que no se manifestaran problemas que pudiera evitar desde el principio. –

+3

@RicardoAltamirano, el único problema que surge de esto es que las listas de procesamiento de códigos deben tener en cuenta esto, ya que las listas pueden contener listas propias u otras estructuras de datos. De lo contrario, no puedo pensar en ningún problema con esto. – Levon

+0

Bueno, el código que procesa la lista 'data' está todo allí. No es nada más que 'random.choice', y debería funcionar correctamente hasta donde yo sé. –

6

No hay problemas inherentes al tener múltiples tipos de datos en una lista. Los problemas pueden surgir, por supuesto, si intenta usar esa lista para algo que espera que sea del mismo tipo. En su ejemplo, si esto es todo lo que hace con él, no hay forma de que se convierta en un problema. Sin embargo, podría considerar usar una tupla en lugar de una lista. Por convención, las tuplas se usan cuando la composición de la secuencia es fija; las listas se usan cuando puede agregarlas o eliminarlas de la secuencia.

+0

Eso es lo que pensé, pero como solo usaré los datos de la lista por separado en sus respectivas variables, no pensé que dañarían. –

9

El lenguaje está bien con usted mezclando tipos en una lista, pero debe saber que la cultura Python puede fruncir el ceño. Las tuplas se usan generalmente cuando tienes una colección conocida de tipos mixtos, y los diferentes índices tienen una semántica diferente. Las listas se usan generalmente cuando tienes una secuencia uniforme de longitud variable.

Así sus datos de manera más convencional se pueden representar como:

data = [ 
    ("name1", "long name1", 1, 2, 3), 
    ("name2", "long name2", 5, 6, 7), 
    ... 
] 

Para decirlo más claramente: tuplas se utilizan como estructuras de C, C listas como matrices.

+0

Y si su tupla es larga o usa muchos lugares en su código, puede definir una clase en su lugar, de modo que pueda nombrar el objeto en cada posición dentro de él. –

Cuestiones relacionadas