in Python: Iteriere über jeden String in einer Liste

7

Ich bin neu bei Python und ich brauche etwas Hilfe dabei.

Aufgabe: eine Liste gegeben - & gt; words = ['aba', 'xyz', 'xgx', 'dssd', 'sdjh']

Ich muss das erste und das letzte Element jeder Zeichenfolge in der Liste vergleichen, Wenn das erste und das letzte Element in der Zeichenfolge identisch sind, erhöhen Sie die Anzahl.

Vorgegebene Liste ist:

%Vor%

Wenn ich manuell versuche, kann ich über jedes Element der Zeichenfolgen in der Liste iterieren.

%Vor%

Aber, wenn ich versuche, über alle Elemente aller Strings in der Liste mit einer FOR-Schleife zu iterieren.

Ich bekomme einen Fehler.

%Vor%

FEHLER:

%Vor%

Bitte lassen Sie mich wissen, wie würde ich erreichen, das erste und das letzte Element einer Nr. zu vergleichen. Zeichenfolgen in der Liste.

Vielen Dank im Voraus.

    
user3168141 07.01.2014, 10:07
quelle

4 Antworten

22

Versuchen Sie:

%Vor%

for word in words gibt die Elemente von words zurück, nicht den Index. Wenn Sie den Index irgendwann benötigen, verwenden Sie enumerate :

%Vor%

würde ausgeben

%Vor%

Das -1 in word[-1] oben ist Pythons Art, "das letzte Element" zu sagen. word[-2] würde Ihnen das vorletzte Element geben, und so weiter.

Sie können auch einen Generator verwenden, um dies zu erreichen.

%Vor%     
Steinar Lima 07.01.2014, 10:13
quelle
1

Der Grund ist, dass in Ihrem zweiten Beispiel i das Wort selbst ist, nicht der Index des Wortes. Also

%Vor%

würde das Äquivalent zu Ihrem Code sein.

    
ShinTakezou 07.01.2014 10:17
quelle
1

Der Vorschlag, dass die Verwendung von range(len()) der Verwendung von enumerate() entspricht, ist falsch. Sie geben die gleichen Ergebnisse zurück, aber sie sind nicht gleich.

Die Verwendung von enumerate() gibt Ihnen tatsächlich Schlüssel / Wert-Paare. Verwenden von range(len()) nicht.

Lassen Sie uns zuerst range(len()) überprüfen (ausgehend vom Beispiel des ursprünglichen Posters):

%Vor%

Dies gibt uns eine einfache Liste:

%Vor%

... und die Elemente in dieser Liste dienen als "Indizes" in unseren Ergebnissen.

Also machen wir dasselbe mit unserer enumerate() version:

%Vor%

Das gibt uns sicher keine Liste:

%Vor%

... also lasst es in eine Liste verwandeln und sehen was passiert:

%Vor%

Es gibt uns:

%Vor%

Dies sind tatsächliche Schlüssel / Wert-Paare.

Also das ...

%Vor%

... nimmt tatsächlich die erste Liste (Wörter) und erstellt eine zweite einfache Liste des Bereichs, der durch die Länge der ersten Liste angezeigt wird.

Wir haben also zwei einfache Listen, und wir drucken nur ein Element aus jeder Liste, um unsere sogenannten "Schlüssel / Wert" -Paare zu erhalten.

Aber sie sind nicht wirklich Schlüssel / Wert-Paare; Sie sind lediglich zwei einzelne Elemente, die gleichzeitig aus verschiedenen Listen gedruckt werden.

Während der enumerate () -Code:

%Vor%

... erstellt auch eine zweite Liste. Aber diese Liste ist eigentlich eine Liste von Schlüssel / Wert-Paaren, und wir fragen nach jedem Schlüssel und Wert aus einer einzigen Quelle - anstatt aus zwei Listen (wie wir es oben getan haben).

>

Wir drucken also die gleichen Ergebnisse, aber die Quellen sind völlig anders - und werden komplett anders gehandhabt.

    
fra 09.01.2015 02:03
quelle
-1

Verwenden Sie stattdessen range () wie folgt:

%Vor%     
Johanna 07.01.2014 10:14
quelle

Tags und Links