Listenzuordnung mit [:]

Was ist der Unterschied zwischen

list = range(100) 

und

  • Python CSV Modul - Zitate fehlen
  • 'Numpy.float64' Objekt ist nicht lesbar
  • Python ctype rekursive strukturen
  • Falsche Ergebnisse mit genetischer Algorithmus Bild Evolution
  • Python - Input enthält NaN, Unendlichkeit oder einen zu großen Wert für dtype ('float64')
  • Wie kann ich wissen, ob das Python-Skript mit der Option -m des Interpreters ausgeführt wurde?
  •  list[:] = range(100) 

    In Python?

    BEARBEITEN

    Ich hätte das schon erwähnt, bevor diese Zuordnungslistenvariable bereits einer Liste zugeordnet wurde:

     list = [1, 2, 3] list = range(100) 

    oder

     list = [1, 2, 3] list[:] = range(100) 

    6 Solutions collect form web for “Listenzuordnung mit [:]”

    Wenn Sie das tun

     lst = anything 

    Du lst den Namen lst auf ein Objekt. Es ändert sich nicht das alte Objekt, das lst verwendet hat, um in irgendeiner Weise zu zeigen , wenn auch nichts anderes auf dieses Objekt hingewiesen hat, wird seine Referenzzählung auf Null fallen und es wird gelöscht.

    Wenn Sie das tun

     lst[:] = whatever 

    Du irerest über whatever auch whatever , das Erstellen eines Zwischen-Tupels und das Zuordnen jedes lst des Tupels zu einem Index in dem bereits vorhandenen lst Objekt. Das bedeutet, wenn mehrere Namen auf das gleiche Objekt verweisen, sehen Sie die Änderung, die reflektiert wird, wenn Sie auf einen der Namen verweisen, genauso, als ob Sie append oder extend oder irgendwelche der anderen append -Ort-Operationen.

    Ein Beispiel für den Unterschied:

     >>> lst = range(1, 4) >>> id(lst) 74339392 >>> lst = [1, 2, 3] >>> id(lst) # different; you pointed lst at a new object 73087936 >>> lst[:] = range(1, 4) >>> id(lst) # the same, you iterated over the list returned by range 73087936 >>> lst = xrange(1, 4) >>> lst xrange(1, 4) # not a list, an xrange object >>> id(lst) # and different 73955976 >>> lst = [1, 2, 3] >>> id(lst) # again different 73105320 >>> lst[:] = xrange(1, 4) # this gets read temporarily into a tuple >>> id(lst) # the same, because you iterated over the xrange 73105320 >>> lst # and still a list [1, 2, 3] 

    Wenn es um Geschwindigkeit geht, ist die Slice-Zuordnung langsamer. Weitere Informationen zum Speicherverbrauch finden Sie unter Python Slice Assignment Memory Usage .

    Der erste redefiniert die eingebaute list , um auf eine Liste zu zeigen.

    Die zweite fehlschlägt mit TypeError: 'type' object does not support item assignment .

    list[:] gibt einen Bereich innerhalb der Liste an, in diesem Fall definiert er den vollständigen Bereich der Liste, dh die ganze Liste und ändert sie. list=range(100) , andererseits wischt man den ursprünglichen Inhalt der list und setzt den neuen Inhalt.

    Versuche folgendes:

     a=[1,2,3,4] a[0:2]=[5,6] a # prints [5,6,3,4] 

    Sie sehen, wir haben die ersten beiden Elemente mit der Zuordnung geändert. Dies bedeutet, mit dieser Notation können Sie mehrere Elemente in der Liste einmal ändern.

    list[:] funktioniert nur, wenn es bereits ein Objekt namens list , das die Slice-Zuordnung erlaubt.

    Außerdem solltest du keine Variablenliste benennen, da es eine eingebaute list die der list selbst ist.

    [:] Ist auch nützlich, um eine tiefe Kopie der Liste zu machen.

     def x(l): f=l[:] g=l l.append(8) print "l", l print "g", g print "f", f l = range(3) print l #[0, 1, 2] x(l) #l [0, 1, 2, 8] #g [0, 1, 2, 8] #f [0, 1, 2] print l #[0, 1, 2, 8] 

    Die Modifikation zu l wird in g reflektiert (weil beide auf dieselbe Liste hinweisen, in der Tat sowohl g als auch l sind nur Namen in python), nicht in f (weil, es ist eine Kopie von l)

    Aber in deinem Fall macht es keinen Unterschied. (Obwohl, ich bin nicht berechtigt, zu jedem Speicher Gebrauch von beiden Methoden zu kommentieren.)

    Bearbeiten

     h = range(3) id(h) #141312204 h[:]=range(3) id(h) #141312204 h=range(3) id(h) #141312588 

    List [:] = range (100) aktualisiert die list list = range (100) erstellt eine neue liste.

    @agf: Danke für den Hinweis auf meinen Fehler

     list[:] = range(100) 

    Wird nicht auf uninitialisierte Variable arbeiten, da es es modifiziert Die [:] gibt die ganze Liste / touple an.

    Python ist die beste Programmiersprache der Welt.