2012-03-24 5 views
-4

Kann jemand bitte diese Syntax erklären?Python List Syntax

1)

counts = [0] * k 

2) for i, count wie in

for i, count in enumerate(counts): 
     sorted_arr.extend([i] * count) 

In Python gibt es nur Liste und Wörterbücher? kein Array \ Warteschlangen \ Stapel?

+1

1. Erstellt ein Array namens counts mit k Elementen, die alle gleich 0 sind. Verwenden Sie für solche Dinge einfach die Shell, um zu testen, was passiert. – corazza

+3

'liste' * ist * ein Array (der Name ist sinnlos und verwirrend meiner Meinung nach, aber was auch immer) und macht auch einen sehr guten Stack (es ist dynamisch und überzuordnen, so dass Sie amortisiert O (1) zum Anhängen/Drücken und Pop ist auch O (1). Warteschlangen (wie auch Deques) befinden sich in der Standardbibliothek. Neben meinem Kopf gibt es auch Sets und Heaps. – delnan

+0

@Bane welche Shell wird empfohlen? Ich habe noch kein Python installiert. –

Antwort

1

Sequenztypen und Multiplikation

[0]*k 

Dies bedeutet eine Liste der Größe k enthält 0 -s. Dies funktioniert für eine beliebige Folge Objekt, zum Beispiel:

"foo"*2 

Iteration über eine Liste

die folgende Syntax vor:

for i, value in enumerate(values): 
    pass 

Dies nutzt zwei Eigenschaften von Python. Die erste ist die for-Syntax, die wie foreach in einigen anderen Sprachen funktioniert. Zum Beispiel sind die folgenden Schleife wird 3-mal mit i gleich 0 das erste Mal, 1 die zweite und die dritte 2:

for i in [0,1,2]: 
    pass 

Der zweite Wert ist auszupacken. Bei einer Sequenztyp, können Sie die Werte in verschiedenen Variablen entpacken:

i, j = (42, 69,) 

Nachdem Sie diese Zeile i laufen 42 halten, und j wird 69 halten.Das ist übrigens ein Tupel, das eine unveränderliche (d. H. Du kannst es nicht ändern) Sequenz hast.

Schließlich nimmt die Funktion enumerate eine Sequenz und gibt eine Sequenz von Tupeln zurück, wobei das erste Element eine Indexnummer ist und das zweite Element der Wert der Sequenz an diesem Index ist. Nun, um genau zu sein, braucht es ein sequenzielles Objekt und gibt einen Iterator zurück, aber denselben Unterschied.

Also, im Grunde, mit dieser Syntax erhalten Sie sowohl den Index und den Wert. Nett.

Einbau-Sequenztypen in Python

Sie haben eine Liste ([1, "fish", 2, "fish", "red", "fish", "blue", "fish"]), eine dict ({'one': 2, 2: 'three'}), ein Tupel ((one, [1,2], three,)) und einen Satz ({"one", 3, (1,2)}, Python 2.7 Syntax). Sie haben auch ein gefrorenes Set, das eine unveränderliche Menge ist und keinen syntaktischen Zucker hat.

Siehe Python documentation for built-in types.

Dann gibt es einige weitere Containertypen im Standard collections package. Und einige mehr data types in other places in the standard library.

Sie können die Standardliste auch als Stapel oder Warteschlange verwenden. Und lassen Sie sich nicht vom array-Paket täuschen - Sie verwenden es nicht, um Arrays zu implementieren (Sie verwenden einfache Listen dafür), Sie verwenden es, um binäre Daten zu importieren. Es ist eine Art Begleiter für das struct Paket.

+0

P.S. Dies ist ein ausgezeichnetes Lehrbuch für Python 3: [Wie denken wie ein Computerwissenschaftler, 3. Ausgabe] (http://openbookproject.net/thinkcs/python/english3e/). Die zweite Ausgabe (verfügbar auf der gleichen Seite) behandelt Python 2. Und einfach das Standard-Python von [python.org] (http://python.org) und Notepad ++ oder etwas, um Text mit zu bearbeiten. – cha0site

3
[0] * k 

auswertet, um eine Liste enthält k Elemente, wobei jedes Element 0 ist.

[i] * count 

auswertet, um eine Liste enthält count Elemente, wobei jedes Element i ist.

Der entsprechende Abschnitt der Dokumentation ist hier: Sequence Types

for i, count in enumerate(counts): 

Die enumerate Funktion gibt einen Iterator, der Tupel ergibt. Jedes Tupel enthält einen Index und den zugehörigen Eintrag von counts. So Ihr Code entspricht:

i = 0 
for count in counts: 
    #do something with i and count 
    i += 1 
+0

danke. Was ist mit "für mich, Count" -Syntax? –

+2

@EladBenda Wenn Sie nichts über Python wissen und daher grundsätzlich nach jedem Konstrukt fragen müssen, tauchen Sie besser in die Dokumentation, ein Buch oder zumindest ein Tutorial ein, bevor Sie hier nachfragen. Es kann sehr viel schneller sein und ist nicht so faul. – delnan

+0

@EladBenda Ich habe jetzt darüber berichtet. Aber ich stimme den Kommentaren von Delnan zu. Sie benötigen eine funktionierende Installation von Python und ein gutes einführendes Lehrbuch. –

0

Python-Klassen hat für arrays, queues und vieles mehr (abgesehen von guten und googleable docs). Sie können Listen auch als queues und stacks verwenden.