it-swarm.com.de

[] und {} vs list () und dict (), was ist besser?

Ich verstehe, dass beide im Wesentlichen dasselbe sind, aber in Bezug auf den Stil, welches ist das bessere (pythonischere), um eine leere Liste oder ein leeres Diktat zu erstellen?

94
Noah McIlraith

Was die Geschwindigkeit anbelangt, gibt es keinen Wettbewerb um leere Listen/Wörter:

>>> from timeit import timeit
>>> timeit("[]")
0.040084982867934334
>>> timeit("list()")
0.17704233359267718
>>> timeit("{}")
0.033620194745424214
>>> timeit("dict()")
0.1821558326547077

und für nicht leer:

>>> timeit("[1,2,3]")
0.24316302770330367
>>> timeit("list((1,2,3))")
0.44744206316727286
>>> timeit("list(foo)", setup="foo=(1,2,3)")
0.446036018543964
>>> timeit("{'a':1, 'b':2, 'c':3}")
0.20868602015059423
>>> timeit("dict(a=1, b=2, c=3)")
0.47635635255323905
>>> timeit("dict(bar)", setup="bar=[('a', 1), ('b', 2), ('c', 3)]")
0.9028228448029267

Wenn Sie die Klammernotation verwenden, können Sie auch Listen- und Wörterbuchverständnisse verwenden, was möglicherweise Grund genug ist.

178
Greg Haskins

Meiner Meinung nach sind [] Und {} Die pythonischsten und lesbarsten Möglichkeiten, leere Listen/Dikte zu erstellen.

Seien Sie vorsichtig bei set(), zum Beispiel:

this_set = {5}
some_other_set = {}

Kann verwirrend sein. Der erste erzeugt eine Menge mit einem Element, der zweite erzeugt ein leeres Diktat und nicht eine Menge.

31
orlp

[] und {} sind besser

list () ist von Natur aus langsamer als [] und dict () ist von Natur aus langsamer als {},

Weil

  1. Es gibt eine Symbolsuche (python im Voraus wissen, ob Sie die Liste nicht neu definiert haben, um etwas anderes zu sein!),

  2. Es gibt Funktionsaufruf,

  3. Dann muss geprüft werden, ob ein wiederholbares Argument übergeben wurde (damit eine Liste mit Elementen daraus erstellt werden kann).

In den meisten Fällen macht der Geschwindigkeitsunterschied jedoch keinen praktischen Unterschied.

( Quelle )

27
Somnath Muluk

Das Diktierliteral kann ein kleines Stück schneller sein, da sein Bytecode kürzer ist:

In [1]: import dis
In [2]: a = lambda: {}
In [3]: b = lambda: dict()

In [4]: dis.dis(a)
  1           0 BUILD_MAP                0
              3 RETURN_VALUE

In [5]: dis.dis(b)
  1           0 LOAD_GLOBAL              0 (dict)
              3 CALL_FUNCTION            0
              6 RETURN_VALUE

Gleiches gilt für list vs []

14
ThiefMaster

IMHO, wenn Sie list() und dict() verwenden, sieht Ihr Python wie C. Ugh aus.

3
RichieHindle

Im Falle eines Unterschieds zwischen [] und list () gibt es eine Falle, auf die ich noch niemanden hingewiesen habe. Wenn Sie ein Wörterbuch als Mitglied der Liste verwenden, führen die beiden zu völlig unterschiedlichen Ergebnissen:

In [1]: foo_dict = {"1":"foo", "2":"bar"}

In [2]: [foo_dict]
Out [2]: [{'1': 'foo', '2': 'bar'}]

In [3]: list(foo_dict)
Out [3]: ['1', '2'] 
1
oxtay

es gibt einen Unterschied im Verhalten zwischen [] und list (), wie das folgende Beispiel zeigt. Wir müssen list () verwenden, wenn wir die Liste der zurückgegebenen Zahlen haben wollen, sonst bekommen wir ein Kartenobjekt! Ich bin mir nicht sicher, wie ich es erklären soll.

sth = [(1,2), (3,4),(5,6)]
sth2 = map(lambda x: x[1], sth) 
print(sth2) # print returns object <map object at 0x000001AB34C1D9B0>

sth2 = [map(lambda x: x[1], sth)]
print(sth2) # print returns object <map object at 0x000001AB34C1D9B0>
type(sth2) # list 
type(sth2[0]) # map

sth2 = list(map(lambda x: x[1], sth))
print(sth2) #[2, 4, 6]
type(sth2) # list
type(sth2[0]) # int
1
sebtac