¿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 listmantiene el orden, dicty setno 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 ;-).
dictasociados con cada valor de la clave A, mientras que listy setsólo contienen valores: muy diferentes casos de uso, obviamente.
setrequiere que los elementos sean hashables, listno: si tiene elementos no hashables, por lo tanto, no puede usar sety debe usar en su lugar list.
setprohíbe duplicados, listno: 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.Countercrear 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, setes 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 lyx not in ll[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 dexinl(en o despuésiy antes dejindeces)Una lista también implementa todas las operaciones de secuencia mutable:
l[i] = x- el elementoidelse reemplaza porxl[i:j] = t- el segmento delfromiajse reemplaza por el contenido del iterabletdel l[i:j]- igual quel[i:j] = []l[i:j:k] = t- los elementos del[i:j:k]son reemplazados por los detdel l[i:j:k]- elimina los elementos des[i:j:k]la listal.append(x)- se agregaxal 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 extiendelcon el contenido detl *= n- actualizacioneslcon su contenido repetidonvecesl.insert(i, x)- se insertaxenlel índice dado poril.pop([i])- recupera el elemento eniy también lo elimina dell.remove(x)- eliminar el primer elemento deldondel[i]es igual a xl.reverse()- invierte los elementos delen su lugarUna lista podría usarse como pila aprovechando los métodos
appendypop.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
sets, es una buena explicación dedictsylists: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.OrderedDictydequeestán disponibles a través delcollectionsmódulo.heapqestá disponible desde elheapqmóduloLifoQueue,QueueyPriorityQueueestán disponibles a través delqueuemódulo diseñado para acceso concurrente (subprocesos). (También haymultiprocessing.Queuedisponible, pero no conozco las diferencias,queue.Queuepero supongo que debería usarse cuando se necesita acceso concurrente desde los procesos).dict,set,frozen_set, Ylistson, 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