Quando devo usar um dicionário, lista ou conjunto?
Existem cenários mais adequados para cada tipo de dados?
fonte
Quando devo usar um dicionário, lista ou conjunto?
Existem cenários mais adequados para cada tipo de dados?
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
.
fonte
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).fonte
Use um dicionário quando tiver um conjunto de chaves exclusivas que mapeiam para valores.
Use uma lista se você tiver uma coleção ordenada de itens.
Use um conjunto para armazenar um conjunto não ordenado de itens.
fonte
Em resumo, use:
list
- se você precisar de uma sequência ordenada de itens.dict
- se você precisar relacionar valores com chavesset
- se você precisar manter elementos únicos.Explicação detalhada
Lista
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
ex 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 dex
eml
(em ou apósi
e antes dej
indeces)Uma lista também implementa todas as operações de sequência mutável:
l[i] = x
- itemi
del
é substituído porx
l[i:j] = t
- fatia del
dei
paraj
é substituída pelo conteúdo do iterávelt
del l[i:j]
- igual al[i:j] = []
l[i:j:k] = t
- os elementos del[i:j:k]
são substituídos pelos det
del l[i:j:k]
- remove os elementos des[i:j:k]
da listal.append(x)
- anexax
ao final da sequêncial.clear()
- remove todos os itens del
(o mesmo que dell[:]
)l.copy()
- cria uma cópia superficial del
(o mesmo quel[:]
)l.extend(t)
oul += t
- estende-sel
ao conteúdo det
l *= n
- atualizaçõesl
com seu conteúdo repetidasn
vezesl.insert(i, x)
- insertosx
eml
no índice fornecido pelai
l.pop([i])
- recupera o item emi
e também o remove del
l.remove(x)
- remova o primeiro item del
ondel[i]
é igual a xl.reverse()
- inverte os itens dol
localUma lista pode ser usada como pilha, aproveitando os métodos
append
epop
.Dicionário
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.
Conjunto
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.
fonte
Embora isso não abranja
set
s, é uma boa explicação dedict
s elist
s:http://www.sthurlow.com/python/lesson06/
fonte
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
, earrays
.OrderedDict
edeque
estão disponíveis viacollections
módulo.heapq
está disponível noheapq
móduloLifoQueue
,,Queue
ePriorityQueue
estão disponíveis através doqueue
módulo projetado para acesso simultâneo (threads). (Também existe ummultiprocessing.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
, Elist
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
fonte
Em combinação com listas , dicts e sets , também existem outros objetos python interessantes, OrderedDicts .
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.
fonte
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.
fonte
Quando usá-los, faço uma folha de dicas exaustiva de seus métodos para sua referência:
fonte
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.
fonte