¿Cuándo debo usar un diccionario, lista o conjunto?
¿Hay escenarios que sean más adecuados para cada tipo de datos?
fuente
¿Cuándo debo usar un diccionario, lista o conjunto?
¿Hay escenarios que sean más adecuados para cada tipo de datos?
A list
mantiene el orden, dict
y set
no lo hace: cuando le importa el orden, por lo tanto, debe usar list
(si su elección de contenedores se limita a estos tres, por supuesto ;-).
dict
asociados con cada valor de la clave A, mientras que list
y set
sólo contienen valores: muy diferentes casos de uso, obviamente.
set
requiere que los elementos sean hashables, list
no: si tiene elementos no hashables, por lo tanto, no puede usar set
y debe usar en su lugar list
.
set
prohíbe duplicados, list
no: también una distinción crucial. (Se puede encontrar un "multiset", que asigna duplicados en un recuento diferente para los elementos presentes más de una vez; puede collections.Counter
crear uno como dict
, si por alguna extraña razón no puede importar collections
, o, en versiones anteriores a 2.7 Python como a collections.defaultdict(int)
, usando los elementos como claves y el valor asociado como el recuento).
Verificar la membresía de un valor en un set
(o dict
, para claves) es increíblemente rápido (toma aproximadamente un tiempo constante y corto), mientras que en una lista toma tiempo proporcional a la longitud de la lista en el promedio y en los peores casos. Por lo tanto, si tiene elementos que se pueden compartir, no importa el pedido o los duplicados, y desea una verificación rápida de la membresía, set
es mejor que list
.
fuente
Cuando desee una colección desordenada de elementos únicos, use a
set
. (Por ejemplo, cuando desea el conjunto de todas las palabras utilizadas en un documento).Cuando desee recopilar una lista ordenada inmutable de elementos, use a
tuple
. (Por ejemplo, cuando desea un par (nombre, número de teléfono) que desea usar como elemento en un conjunto, necesitaría una tupla en lugar de una lista, ya que los conjuntos requieren que los elementos sean inmutables).Cuando desee recopilar una lista ordenada mutable de elementos, use a
list
. (Por ejemplo, cuando desea agregar nuevos números de teléfono a una lista: [número1, número2, ...]).Cuando desee una asignación de claves a valores, use a
dict
. (Por ejemplo, cuando desea una guía telefónica que asigne nombres a números telefónicos:){'John Smith' : '555-1212'}
. Tenga en cuenta que las claves en un dict no están ordenadas. (Si itera a través de un dict (guía telefónica), las claves (nombres) pueden aparecer en cualquier orden).fuente
Use un diccionario cuando tenga un conjunto de claves únicas que se asignen a valores.
Use una lista si tiene una colección ordenada de artículos.
Use un conjunto para almacenar un conjunto desordenado de elementos.
fuente
En resumen, use:
list
- si necesita una secuencia ordenada de artículos.dict
- si necesita relacionar valores con clavesset
- Si necesita mantener elementos únicos.Explicación detallada
Lista
Una lista es una secuencia mutable, generalmente utilizada para almacenar colecciones de artículos homogéneos.
Una lista implementa todas las operaciones de secuencia comunes:
x in l
yx not in l
l[i]
`l[i:j]
`l[i:j:k]
len(l)
`min(l)
`max(l)
l.count(x)
l.index(x[, i[, j]])
- índice de la primera aparición dex
inl
(en o despuési
y antes dej
indeces)Una lista también implementa todas las operaciones de secuencia mutable:
l[i] = x
- el elementoi
del
se reemplaza porx
l[i:j] = t
- el segmento del
fromi
aj
se reemplaza por el contenido del iterablet
del l[i:j]
- igual quel[i:j] = []
l[i:j:k] = t
- los elementos del[i:j:k]
son reemplazados por los det
del l[i:j:k]
- elimina los elementos des[i:j:k]
la listal.append(x)
- se agregax
al final de la secuencial.clear()
- elimina todos los elementos del
(igual que dell[:]
)l.copy()
- crea una copia superficial del
(igual quel[:]
)l.extend(t)
ol += t
- se extiendel
con el contenido det
l *= n
- actualizacionesl
con su contenido repetidon
vecesl.insert(i, x)
- se insertax
enl
el índice dado pori
l.pop([i])
- recupera el elemento eni
y también lo elimina del
l.remove(x)
- eliminar el primer elemento del
dondel[i]
es igual a xl.reverse()
- invierte los elementos del
en su lugarUna lista podría usarse como pila aprovechando los métodos
append
ypop
.Diccionario
Un diccionario asigna valores hashables a objetos arbitrarios. Un diccionario es un objeto mutable. Las operaciones principales en un diccionario son almacenar un valor con alguna clave y extraer el valor dado la clave.
En un diccionario, no puede usar como claves valores que no sean hashables, es decir, valores que contengan listas, diccionarios u otros tipos mutables.
Conjunto
Un conjunto es una colección desordenada de objetos hashables distintos. Un conjunto se usa comúnmente para incluir pruebas de membresía, eliminar duplicados de una secuencia y calcular operaciones matemáticas como intersección, unión, diferencia y diferencia simétrica.
fuente
Aunque esto no cubre
set
s, es una buena explicación dedict
sylist
s:http://www.sthurlow.com/python/lesson06/
fuente
Para C ++, siempre tuve en mente este diagrama de flujo: ¿ en qué escenario utilizo un contenedor STL particular? , así que tenía curiosidad por saber si algo similar está disponible para Python3 también, pero no tuve suerte.
Lo que debe tener en cuenta para Python es: no hay un único estándar de Python para C ++. Por lo tanto, puede haber grandes diferencias para diferentes intérpretes de Python (por ejemplo, CPython, PyPy). El siguiente diagrama de flujo es para CPython.
Adicionalmente he encontrado ninguna buena manera de incorporar las siguientes estructuras de datos en el diagrama:
bytes
,byte arrays
,tuples
,named_tuples
,ChainMap
,Counter
, yarrays
.OrderedDict
ydeque
están disponibles a través delcollections
módulo.heapq
está disponible desde elheapq
móduloLifoQueue
,Queue
yPriorityQueue
están disponibles a través delqueue
módulo diseñado para acceso concurrente (subprocesos). (También haymultiprocessing.Queue
disponible, pero no conozco las diferencias,queue.Queue
pero supongo que debería usarse cuando se necesita acceso concurrente desde los procesos).dict
,set
,frozen_set
, Ylist
son, por supuesto orden internaLe agradecería a cualquiera que pudiera mejorar esta respuesta y proporcionar un mejor diagrama en cada aspecto. Siéntete libre y bienvenido.
PD: el diagrama se ha realizado con yed. El archivo Graphml está aquí.
fuente
En combinación con listas , dictos y conjuntos , también hay otros objetos interesantes de Python, OrderedDicts .
OrderedDicts podría ser útil cuando necesita preservar el orden de las claves, por ejemplo, trabajar con documentos: es común necesitar la representación vectorial de todos los términos en un documento. Entonces, usando OrderedDicts puede verificar eficientemente si un término se ha leído antes, agregar términos, extraer términos y, después de todas las manipulaciones, puede extraer la representación vectorial ordenada de ellos.
fuente
Las listas son lo que parecen: una lista de valores. Cada uno de ellos está numerado, comenzando desde cero: el primero está numerado como cero, el segundo 1, el tercero 2, etc. Puede eliminar valores de la lista y agregar nuevos valores al final. Ejemplo: los nombres de tus muchos gatos.
Las tuplas son como las listas, pero no puedes cambiar sus valores. Los valores que le das primero son los valores con los que estás atascado para el resto del programa. Nuevamente, cada valor está numerado a partir de cero, para una fácil referencia. Ejemplo: los nombres de los meses del año.
Los diccionarios son similares a lo que su nombre sugiere: un diccionario. En un diccionario, tiene un 'índice' de palabras, y para cada una de ellas una definición. En python, la palabra se llama 'clave' y la definición un 'valor'. Los valores en un diccionario no están numerados, son similares a lo que sugiere su nombre, un diccionario. En un diccionario, tiene un 'índice' de palabras, y para cada una de ellas una definición. En python, la palabra se llama 'clave' y la definición un 'valor'. Los valores en un diccionario no están numerados, tampoco están en un orden específico, la clave hace lo mismo. Puede agregar, eliminar y modificar los valores en los diccionarios. Ejemplo: guía telefónica.
fuente
Cuando los uso, hago una hoja de referencia exhaustiva de sus métodos para su referencia:
fuente
Diccionario: un diccionario de Python se usa como una tabla hash con clave como índice y objeto como valor.
Lista: se utiliza una lista para contener objetos en una matriz indexada por posición de ese objeto en la matriz.
Conjunto: un conjunto es una colección con funciones que pueden determinar si un objeto está presente o no en el conjunto.
fuente