Eu entendo que ambos são essencialmente a mesma coisa, mas em termos de estilo, qual é o melhor (mais pitônico) para usar para criar uma lista vazia ou dict?
python
performance
list
dictionary
Noah McIlraith
fonte
fonte
list(i for i in range(10) if i % 2)
timeit()
função relata a quantidade total de tempo para executar um número especificado de iterações, que é1000000
por padrão. Portanto, os exemplos acima são o número de segundos para executar o snippet de código um milhão de vezes. Por exemplotimeit('dict()', number=1) // -> 4.0531158447265625e-06
(uma iteração) whiletimeit('dict()') // -> 0.12412905693054199
(um milhão de iterações)Na minha opinião
[]
e{}
são as formas mais pítônicas e legíveis de criar listas / dictos vazios.set()
Porém, tenha cuidado com o, por exemplo:Pode ser confuso. O primeiro cria um conjunto com um elemento, o segundo cria um dicionário vazio e não um conjunto.
fonte
{}
sempre cria um dicionário vazio.{1,2,3}
cria um conjunto no 2.7+, mas é um erro de sintaxe em2.6
versões anteriores.some_epic_set
que está apontando para umdict
objeto vazio ... não é um conjunto vazio. Para um conjunto vazio, você precisa usarset()
.{5}
criar um conjunto com um elemento5
e{}
é um dicionário vazio.{*()}
para fazer um vazioset
com a sintaxe literal. Eu chamo isso de operador de macaco caolho. :-)O literal dict pode ser um minúsculo pouco mais rápido como seu bytecode é mais curto:
O mesmo se aplica ao
list
vs[]
fonte
CALL_FUNCTION
leva pelo menos tanto tempo quantoBUILD_MAP
(a função que está sendo chamada essencialmenteBUILD_MAP
) eLOAD_GLOBAL
leva apenas uma sobrecarga adicional.IMHO, usando
list()
edict()
faz seu Python parecer C. Ugh.fonte
No caso de diferença entre [] e list (), há uma armadilha que não vi ninguém apontar. Se você usar um dicionário como membro da lista, os dois fornecerão resultados totalmente diferentes:
fonte
[foo_dict]
usandolist((foo_dict,))
. Olist()
método pega um iterável como único parâmetro e itera sobre ele para adicionar elementos à lista. Isso causará uma armadilha semelhante, olist(some_list)
que achatará a lista.list () e [] funcionam de forma diferente:
list () sempre cria um novo objeto no heap, mas [] pode reutilizar a célula de memória por vários motivos.
fonte
há uma diferença de comportamento entre [] e list () como mostra o exemplo abaixo. precisamos usar list () se quisermos que a lista de números seja retornada, caso contrário, obteremos um objeto de mapa! Não tenho certeza de como explicar isso.
fonte
Um par de colchetes denota um de um objeto de lista, ou um índice subscrito, my_List [x].
Um par de chaves denota um objeto de dicionário.
a_list = ['ligado', 'desligado', 1, 2]
a_dict = {on: 1, off: 2}
fonte
É principalmente uma questão de escolha na maioria das vezes. É uma questão de preferência.
Observe, porém, que se você tiver teclas numéricas, por exemplo, não poderá fazer:
Você tem que fazer:
fonte
mydict = {1:"foo", 2:"bar"}
(sem as aspas para as chaves).