3 Stimmen

Python-Listen (Slice-Methode)

Ich bin ein Neuling in Python, überall lese ich über Liste Methoden sehe ich eine Sache

Die Slice-Methode liefert eine "neue" Liste

Was ist hier mit "neuer" Liste gemeint, und warum geht das schneller als die Änderung der ursprünglichen Liste?

Ist es wirklich wichtig, wenn Python die ursprüngliche Liste manipuliert, ich meine, ich kann sie sowieso nicht verwenden.

3voto

NPE Punkte 462670

Mit Listen können Sie beides tun:

1) Erstellen Sie eine neue Liste (das Original bleibt erhalten):

In [1]: l = [1, 2, 3, 4, 5]

In [2]: l[:3]
Out[2]: [1, 2, 3]

In [3]: l
Out[3]: [1, 2, 3, 4, 5]

2) die Liste an Ort und Stelle ändern:

In [6]: del l[3:]

In [7]: l
Out[7]: [1, 2, 3]

In [8]: l.append(15)

In [9]: l
Out[9]: [1, 2, 3, 15]

Es liegt an Ihnen zu entscheiden, welcher Weg für Ihr Problem sinnvoller ist.

Im Gegensatz zu Listen sind Tupel unveränderlich, d. h. man kann sie zwar zerschneiden, aber nicht an Ort und Stelle verändern.

2voto

Niek de Klein Punkte 8317

Ich hoffe, dass dies hilft zu erklären, was es bedeutet, eine neue Liste zu erstellen:

>>> lista = [1, 2, 3, 4]         
>>> listb = lista
>>> print lista
[1, 2, 3, 4]
>>> print listb
[1, 2, 3, 4]
>>> lista[0] = 3
>>> print listb
[3, 2, 3, 4]
>>> listc = lista[:]
>>> print listc
[3, 2, 3, 4]
>>> lista[0] = 1
>>> print listc
[3, 2, 3, 4]

Wenn Sie listb = lista Sie erstellen keine neue Liste, sondern einen zusätzlichen Verweis auf dieselbe Liste. Dies wird durch die Änderung des ersten Elements in lista mit lista[0] = 3 ändert sich auch das erste Element in der Listeb. Wenn man jedoch die Listea in die Listec mit listc = lista[:] kopieren Sie die Werte. Beim Ändern des ersten Elements von lista zurück auf 1 mit lista[0] = 1 ist das erste Element der Listec immer noch 3.

Für die Geschwindigkeit würde ich erwarten, dass das Schneiden langsamer ist, aber das sollte no eine Überlegung bei der Auswahl sein. Wie ich gezeigt habe, haben beide eine sehr unterschiedliche Auswirkung und es hängt davon ab, was Sie mit der Liste machen wollen, und nicht von der Geschwindigkeit ( dies ist allgemein. Es gibt Gelegenheiten, bei denen die Geschwindigkeit wichtig sein kann ).

0voto

Silas Ray Punkte 25276
  1. "Neu" bedeutet eine flache Kopie des Teils der Liste, den Sie geschnitten haben.

  2. Das hängt davon ab, was Sie erreichen wollen. Bei Ihrer speziellen Implementierung sind Ihnen die Originaldaten vielleicht egal, aber ich bin mir sicher, dass Sie sich Szenarien ausdenken können, in denen Sie mit einer Teilmenge von Daten arbeiten wollen, ohne die Originale zu verändern (bedenken Sie jedoch, dass es sich nur um eine oberflächliche Kopie handelt, so dass es viele Fälle gibt, in denen Sie die Daten im Original und im Slice verändern, wenn Sie an einem Slice arbeiten). Außerdem ist es nicht schneller, sondern sogar langsamer, da das System Speicher zuweisen und neue Objekte konstruieren muss. Der Gewinn ist nicht die Geschwindigkeit, sondern die Funktionalität.

0voto

KurzedMetal Punkte 12066

Wenn eine Funktion/Methode eine neue Liste erstellt, bedeutet dies, dass Ihr Skript die doppelte Menge an Speicher verbrauchen muss und einen kleinen (oder nicht so kleinen) Overhead hat, während es ein Duplikat der alten Liste erstellt.

Wenn die Liste sehr groß ist, kann die Leistung Ihres Skripts sehr schnell sinken. Aus diesem Grund sollten Sie bei großen Datenmengen die Listen lieber direkt ändern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X