in python: Iteration über jeden string in einer Liste
Im neu in python und ich brauche etwas Hilfe mit diesem.
AUFGABE : eine Liste --> words = ['aba', 'xyz', 'xgx', 'dssd', 'sdjh']
ich vergleichen müssen das erste und das Letzte element jeder string in der Liste,
wenn das erste und das Letzte element in der Zeichenfolge ist das gleiche , dann erhöht Sie die Anzahl.
Vorgegebenen Liste ist :
words = ['aba', 'xyz', 'xgx', 'dssd', 'sdjh']
Wenn ich versuche manuell, ich kann iteriert über jedes element des strings in der Liste.
words = ['aba', 'xyz', 'xgx', 'dssd', 'sdjh']
w1 = words[0]
print w1
aba
for i in w1:
print i
a
b
a
if w1[0] == w1[len(w1) - 1]:
c += 1
print c
1
Aber, Wenn ich versuche zu iterieren über alle Elemente und alle strings in der Liste mit einer FOR-Schleife.
bekomme ich eine Fehlermeldung.
words = ['aba', 'xyz', 'xgx', 'dssd', 'sdjh']
c = 0
for i in words:
w1 = words[i]
if w1[0] == w1[len(w1) - 1]:
c += 1
print c
FEHLER:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
TypeError: list indices must be integers, not str
bitte lassen Sie mich wissen, wie kann ich erreichen, vergleicht man das erste und das Letzte element einer nicht. strings in der Liste.
Vielen Dank im Voraus.
- Iteration über eine Liste gibt die Elemente, die nicht Indizes, daher der Fehler.
- Ihr Python one-liner zu tun, was Sie wollen (aber nicht lösen oder erklären den bug) würde wie folgt Aussehen:
c = sum([1 if w[0] == w[-1] else 0 for w in words])
. Aber das wird nicht wirklich helfen Ihnen, bis Sie anfangen, das hängt von Liste-Verstehens (noch kürzer:c = sum([int(w[0] == w[-1]) for w in words])
). - Sie können die drop -
int
anrufen und[]
als gut.. 😉 - Hm, ich weiß nicht, wie Boolesche Werte summieren, aber ich denke, implizite Konvertierung funktioniert hier. Ich ließ es stehen, sonst wird Ihr Kommentar nicht Sinn machen ;-).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen:
for word in words
gibt die Elemente vonwords
, nicht der index. Wenn Sie den index irgendwann, versuchen Sie es mitenumerate
:ausgeben würde
Den
-1
imword[-1]
oben ist Python ' s Art zu sagen: "das Letzte element".word[-2]
würde Ihnen das Letzte element, und so weiter.Können Sie auch einen generator um dies zu erreichen.
Der Grund ist, dass in deinem zweiten Beispiel
i
ist das Wort selbst, nicht der index des Wortes. Sowäre das äquivalent zu Ihrem code.
Den Vorschlag, dass die Verwendung
range(len())
entspricht der Verwendungenumerate()
ist falsch. Kehren Sie die gleichen Ergebnisse, aber Sie sind nicht das gleiche.Mit
enumerate()
tatsächlich gibt Sie Schlüssel/Wert-Paaren. Mitrange(len())
nicht.Let ' s check
range(len())
ersten (arbeiten aus dem Beispiel aus dem original-poster):Dies gibt uns eine einfache Liste:
... und die Elemente dieser Liste dienen als die "Indizes" unsere Ergebnisse.
Also machen wir das gleiche mit unseren
enumerate()
version:Dies ist sicherlich nicht geben Sie uns eine Liste:
...also lasst uns schalten Sie es in eine Liste, und sehen, was passiert:
Es uns gibt:
Diese sind der eigentliche Schlüssel/Wert-Paaren.
So, in diesem ...
... eigentlich dauert die erste Liste (Wörter), und erstellt eine zweiten, einfache Liste der Spanne von der Länge der ersten Liste.
Wir haben also zwei einfache Listen, und wir sind bloß drucken ein element aus jeder Liste, um zu bekommen, unsere sogenannten "key/value" - Paare.
Aber Sie sind nicht wirklich Schlüssel/Wert-Paare; Sie sind lediglich zwei einzelne Elemente gedruckt in der gleichen Zeit, von verschiedenen Listen.
In der Erwägung, dass die
enumerate ()
code:... schafft auch eine zweite Liste. Aber die Liste eigentlich ist eine Liste von Schlüssel/Wert-Paare, und wir sind gefragt, für jedes Schlüssel-Wert-aus einer Hand-anstatt von zwei Listen (wie oben).
So drucken wir die gleichen Ergebnisse, aber die Quellen sind völlig anders-und wird komplett anders.
Der folgende code gibt die Anzahl der Wörter, deren erste und der Letzte Buchstabe gleich sind. Getestet und überprüft mit einem python-online-compiler:
Ausgabe:
Range() statt, wie die folgenden :