Respuestas:
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.
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 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 de xin l(en o después iy antes de jindeces)Una lista también implementa todas las operaciones de secuencia mutable:
l[i] = x- el elemento ide lse reemplaza porxl[i:j] = t- el segmento de lfrom ia jse reemplaza por el contenido del iterabletdel l[i:j] - igual que l[i:j] = []l[i:j:k] = t- los elementos de l[i:j:k]son reemplazados por los detdel l[i:j:k]- elimina los elementos de s[i:j:k]la listal.append(x)- se agrega xal 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 lcon el contenido detl *= n- actualizaciones lcon su contenido repetido nvecesl.insert(i, x)- se inserta xen lel índice dado poril.pop([i])- recupera el elemento en iy también lo elimina dell.remove(x)- eliminar el primer elemento de ldonde l[i]es igual a xl.reverse()- invierte los elementos de len su lugarUna lista podría usarse como pila aprovechando los métodos appendy 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 sets, es una buena explicación de dictsy lists:
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.
OrderedDicty dequeestán disponibles a través del collectionsmódulo.heapqestá disponible desde el heapqmóduloLifoQueue, Queuey PriorityQueueestán disponibles a través del queuemódulo diseñado para acceso concurrente (subprocesos). (También hay multiprocessing.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, Y listson, 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.