Respuestas:
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
.
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).
En resumen, use:
list
- si necesita una secuencia ordenada de artículos.
dict
- si necesita relacionar valores con claves
set
- Si necesita mantener elementos únicos.
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
y x 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 de x
in l
(en o después i
y antes de j
indeces)Una lista también implementa todas las operaciones de secuencia mutable:
l[i] = x
- el elemento i
de l
se reemplaza porx
l[i:j] = t
- el segmento de l
from i
a j
se reemplaza por el contenido del iterablet
del l[i:j]
- igual que l[i:j] = []
l[i:j:k] = t
- los elementos de l[i:j:k]
son reemplazados por los det
del l[i:j:k]
- elimina los elementos de s[i:j:k]
la listal.append(x)
- se agrega x
al final de la secuencial.clear()
- elimina todos los elementos de l
(igual que del l[:]
)l.copy()
- crea una copia superficial de l
(igual que l[:]
)l.extend(t)
o l += t
- se extiende l
con el contenido det
l *= n
- actualizaciones l
con su contenido repetido n
vecesl.insert(i, x)
- se inserta x
en l
el índice dado pori
l.pop([i])
- recupera el elemento en i
y también lo elimina del
l.remove(x)
- eliminar el primer elemento de l
donde l[i]
es igual a xl.reverse()
- invierte los elementos de l
en su lugarUna lista podría usarse como pila aprovechando los métodos append
y pop
.
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.
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.
Aunque esto no cubre set
s, es una buena explicación de dict
sy list
s:
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.
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. 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.
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
, y arrays
.
OrderedDict
y deque
están disponibles a través del collections
módulo.heapq
está disponible desde el heapq
móduloLifoQueue
, Queue
y PriorityQueue
están disponibles a través del queue
módulo diseñado para acceso concurrente (subprocesos). (También hay multiprocessing.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
, Y list
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í.
En combinación con listas , dictos y conjuntos , también hay otros objetos interesantes de Python, OrderedDicts .
Los diccionarios ordenados son como los diccionarios normales, pero recuerdan el orden en que se insertaron los elementos. Al iterar sobre un diccionario ordenado, los elementos se devuelven en el orden en que se agregaron sus claves por primera vez.
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.
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.
Cuando los uso, hago una hoja de referencia exhaustiva de sus métodos para su referencia:
class ContainerMethods:
def __init__(self):
self.list_methods_11 = {
'Add':{'append','extend','insert'},
'Subtract':{'pop','remove'},
'Sort':{'reverse', 'sort'},
'Search':{'count', 'index'},
'Entire':{'clear','copy'},
}
self.tuple_methods_2 = {'Search':'count','index'}
self.dict_methods_11 = {
'Views':{'keys', 'values', 'items'},
'Add':{'update'},
'Subtract':{'pop', 'popitem',},
'Extract':{'get','setdefault',},
'Entire':{ 'clear', 'copy','fromkeys'},
}
self.set_methods_17 ={
'Add':{['add', 'update'],['difference_update','symmetric_difference_update','intersection_update']},
'Subtract':{'pop', 'remove','discard'},
'Relation':{'isdisjoint', 'issubset', 'issuperset'},
'operation':{'union' 'intersection','difference', 'symmetric_difference'}
'Entire':{'clear', 'copy'}}
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.