Respostas:
A list
mantém a ordem dict
e set
não: quando você se importa com a ordem, portanto, deve usá-la list
(se a sua escolha de contêineres for limitada a esses três, é claro ;-).
dict
associa a cada chave um valor, enquanto list
e set
apenas contém valores: casos de uso muito diferentes, obviamente.
set
requer que os itens sejam laváveis, list
não é necessário: se você tiver itens não laváveis, não poderá usar set
e, em vez disso, deverá usá-lo list
.
set
proíbe duplicados, list
não: também uma distinção crucial. (Um "multiset", que mapeia duplicatas em uma contagem diferente para itens presentes mais de uma vez, pode ser encontrado em collections.Counter
- você pode criar uma como a dict
, se por algum motivo estranho não puder importar collections
ou, na versão anterior à 2.7 Python como a collections.defaultdict(int)
, usando os itens como chaves e o valor associado como a contagem).
A verificação da associação de um valor em um set
(ou dict
, para chaves) é incrivelmente rápida (levando um tempo constante e curto), enquanto em uma lista leva um tempo proporcional ao tamanho da lista nos casos médios e piores. Portanto, se você possui itens que podem ser lavados, não se preocupe com pedidos ou duplicatas e deseja uma verificação rápida da associação, set
é melhor que list
.
Quando você deseja uma coleção não ordenada de elementos exclusivos, use a set
. (Por exemplo, quando você deseja o conjunto de todas as palavras usadas em um documento).
Quando você deseja coletar uma lista ordenada imutável de elementos, use a tuple
. (Por exemplo, quando você deseja um par (nome, número de telefone) que deseja usar como elemento em um conjunto, seria necessária uma tupla em vez de uma lista, pois os conjuntos exigem que os elementos sejam imutáveis.
Quando você deseja coletar uma lista ordenada mutável de elementos, use a list
. (Por exemplo, quando você deseja acrescentar novos números de telefone a uma lista: [número1, número2, ...]).
Quando você deseja um mapeamento de chaves para valores, use a dict
. (Por exemplo, quando você deseja uma lista telefônica que mapeia nomes para números de telefone:) {'John Smith' : '555-1212'}
. Observe que as chaves em um ditado não estão ordenadas. (Se você percorrer um ditado (lista telefônica), as teclas (nomes) podem aparecer em qualquer ordem).
Em resumo, use:
list
- se você precisar de uma sequência ordenada de itens.
dict
- se você precisar relacionar valores com chaves
set
- se você precisar manter elementos únicos.
Uma lista é uma sequência mutável, normalmente usada para armazenar coleções de itens homogêneos.
Uma lista implementa todas as operações comuns de sequência:
x in l
e 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 da 1ª ocorrência de x
em l
(em ou após i
e antes de j
indeces)Uma lista também implementa todas as operações de sequência mutável:
l[i] = x
- item i
de l
é substituído porx
l[i:j] = t
- fatia de l
de i
para j
é substituída pelo conteúdo do iterávelt
del l[i:j]
- igual a l[i:j] = []
l[i:j:k] = t
- os elementos de l[i:j:k]
são substituídos pelos det
del l[i:j:k]
- remove os elementos de s[i:j:k]
da listal.append(x)
- anexa x
ao final da sequêncial.clear()
- remove todos os itens de l
(o mesmo que del l[:]
)l.copy()
- cria uma cópia superficial de l
(o mesmo que l[:]
)l.extend(t)
ou l += t
- estende-se l
ao conteúdo det
l *= n
- atualizações l
com seu conteúdo repetidas n
vezesl.insert(i, x)
- insertos x
em l
no índice fornecido pelai
l.pop([i])
- recupera o item em i
e também o remove del
l.remove(x)
- remova o primeiro item de l
onde l[i]
é igual a xl.reverse()
- inverte os itens do l
localUma lista pode ser usada como pilha, aproveitando os métodos append
e pop
.
Um dicionário mapeia valores hashable para objetos arbitrários. Um dicionário é um objeto mutável. As principais operações de um dicionário são armazenar um valor com alguma chave e extrair o valor fornecido com a chave.
Em um dicionário, você não pode usar como valores de chaves que não sejam laváveis, ou seja, valores que contêm listas, dicionários ou outros tipos mutáveis.
Um conjunto é uma coleção não ordenada de objetos hash distintos. Um conjunto é comumente usado para incluir teste de associação, remover duplicatas de uma sequência e calcular operações matemáticas como interseção, união, diferença e diferença simétrica.
Embora isso não abranja set
s, é uma boa explicação de dict
s e list
s:
As listas são o que parecem - uma lista de valores. Cada um deles é numerado, começando do zero - o primeiro é numerado como zero, o segundo 1, o segundo 2, etc. Você pode remover valores da lista e adicionar novos valores ao final. Exemplo: nomes de muitos gatos.
Os dicionários são semelhantes ao que o nome sugere - um dicionário. Em um dicionário, você tem um 'índice' de palavras e para cada uma delas uma definição. Em python, a palavra é chamada de 'chave' e a definição de 'valor'. Os valores em um dicionário não são numerados - são semelhantes ao que o nome sugere - um dicionário. Em um dicionário, você tem um 'índice' de palavras e para cada uma delas uma definição. Os valores em um dicionário não são numerados - eles também não estão em nenhuma ordem específica - a chave faz a mesma coisa. Você pode adicionar, remover e modificar os valores nos dicionários. Exemplo: lista telefônica.
Para C ++, eu sempre tinha esse fluxograma em mente: em que cenário eu uso um contêiner STL específico? , fiquei curioso para saber se algo semelhante também está disponível para o Python3, mas não tive sorte.
O que você precisa ter em mente para o Python é: Não existe um padrão único do Python para o C ++. Portanto, pode haver grandes diferenças para diferentes intérpretes Python (por exemplo, CPython, PyPy). O fluxograma a seguir é para CPython.
Além disso eu descobri nenhuma boa maneira de incorporar os seguintes estruturas de dados para o diagrama de: bytes
, byte arrays
, tuples
, named_tuples
, ChainMap
, Counter
, e arrays
.
OrderedDict
e deque
estão disponíveis via collections
módulo.heapq
está disponível no heapq
móduloLifoQueue
,, Queue
e PriorityQueue
estão disponíveis através do queue
módulo projetado para acesso simultâneo (threads). (Também existe um multiprocessing.Queue
disponível, mas não conheço as diferenças, queue.Queue
mas considero que ele deve ser usado quando o acesso simultâneo dos processos for necessário.)dict
, set
, frozen_set
, E list
são embutido é claroPara qualquer um, eu ficaria grato se você pudesse melhorar esta resposta e fornecer um diagrama melhor em todos os aspectos. Sinta-se livre e bem-vindo.
PS: o diagrama foi feito com yed. O arquivo graphml está aqui
Em combinação com listas , dicts e sets , também existem outros objetos python interessantes, OrderedDicts .
Os dicionários ordenados são como dicionários regulares, mas lembram a ordem em que os itens foram inseridos. Ao iterar sobre um dicionário ordenado, os itens são retornados na ordem em que suas chaves foram adicionadas pela primeira vez.
OrderedDicts pode ser útil quando você precisa preservar a ordem das chaves, por exemplo, trabalhando com documentos: É comum precisar a representação vetorial de todos os termos em um documento. Portanto, usando OrderedDicts, você pode verificar com eficiência se um termo foi lido antes, adicionar termos, extrair termos e, depois de todas as manipulações, você pode extrair a representação vetorial ordenada deles.
As listas são o que parecem - uma lista de valores. Cada um deles é numerado, começando do zero - o primeiro é numerado como zero, o segundo 1, o segundo 2, etc. Você pode remover valores da lista e adicionar novos valores ao final. Exemplo: nomes de muitos gatos.
As tuplas são como listas, mas você não pode alterar seus valores. Os valores que você desiste primeiro são os valores que você mantém no restante do programa. Novamente, cada valor é numerado a partir de zero, para fácil referência. Exemplo: os nomes dos meses do ano.
Os dicionários são semelhantes ao que o nome sugere - um dicionário. Em um dicionário, você tem um 'índice' de palavras e para cada uma delas uma definição. Em python, a palavra é chamada de 'chave' e a definição de 'valor'. Os valores em um dicionário não são numerados - são semelhantes ao que o nome sugere - um dicionário. Em um dicionário, você tem um 'índice' de palavras e para cada uma delas uma definição. Em python, a palavra é chamada de 'chave' e a definição de 'valor'. Os valores em um dicionário não são numerados - eles também não estão em nenhuma ordem específica - a chave faz a mesma coisa. Você pode adicionar, remover e modificar os valores nos dicionários. Exemplo: lista telefônica.
Quando usá-los, faço uma folha de dicas exaustiva de seus métodos para sua referência:
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'}}
Dicionário: um dicionário python é usado como uma tabela de hash com chave como índice e objeto como valor.
Lista: Uma lista é usada para manter objetos em uma matriz indexada pela posição desse objeto na matriz.
Conjunto: um conjunto é uma coleção com funções que podem dizer se um objeto está presente ou não no conjunto.