webentwicklung-frage-antwort-db.com.de

in python: iteriere über jeden String in einer Liste

Ich bin neu in Python und ich brauche Hilfe dabei.

TASK: eine Liste gegeben -> 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.

Die gegebene Liste ist:

words = ['aba', 'xyz', 'xgx', 'dssd', 'sdjh']

Wenn ich es manuell versuche, kann ich jedes Element der Zeichenfolgen in der Liste durchlaufen.

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, alle Elemente aller Zeichenfolgen in der Liste mit einer FOR-Schleife zu durchlaufen.

ich bekomme einen Fehler.

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

ERROR:

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 ich das erste und das letzte Element eines Nein vergleichen könnte. Zeichenfolgen in der Liste.

Danke im Voraus.

13
user3168141

Versuchen:

for Word in words:
    if Word[0] == Word[-1]:
        c += 1
    print c

for Word in words gibt die Elemente von words zurück, nicht den Index. Wenn Sie den Index einmal benötigen, versuchen Sie es mit enumerate:

for idx, Word in enumerate(words):
    print idx, Word

würde ausgeben

0, 'aba'
1, 'xyz'
etc.

Der -1 in Word[-1] sagt Python so aus, als "das letzte Element" zu sprechen. Word[-2] würde Ihnen das vorletzte Element geben und so weiter.

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

c = sum(1 for Word in words if Word[0] == Word[-1])
29
Steinar Lima

Der Vorschlag, dass die Verwendung von range(len()) dem Äquivalent von enumerate() entspricht, ist falsch. Sie liefern die gleichen Ergebnisse, sind aber nicht gleich.

Wenn Sie enumerate() verwenden, erhalten Sie tatsächlich Schlüssel/Wert-Paare. Die Verwendung von range(len()) funktioniert nicht.

Zuerst prüfen wir range(len()) (anhand des Beispiels vom Originalposter):

words = ['aba', 'xyz', 'xgx', 'dssd', 'sdjh']
    print range(len(words))

Dies gibt uns eine einfache Liste:

[0, 1, 2, 3, 4]

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

Also machen wir dasselbe mit unserer enumerate()-Version:

words = ['aba', 'xyz', 'xgx', 'dssd', 'sdjh']    
   print enumerate(words)

Dies gibt uns sicherlich keine Liste:

<enumerate object at 0x7f6be7f32c30>

... also lass es in eine Liste machen und sehen was passiert:

print list(enumerate(words))

Es gibt uns:

[(0, 'aba'), (1, 'xyz'), (2, 'xgx'), (3, 'dssd'), (4, 'sdjh')]

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

Also das ...

words = ['aba', 'xyz', 'xgx', 'dssd', 'sdjh']

for i in range(len(words)):
    print "words[{}] = ".format(i), words[i]

... nimmt tatsächlich die erste Liste (Wörter) und erstellt eine second, einfache Liste des Bereichs, der durch die Länge der ersten Liste angegeben 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. es handelt sich lediglich um zwei einzelne Elemente, die aus verschiedenen Listen gleichzeitig gedruckt werden.

Der enumerate ()-Code:

for i, Word in enumerate(words):
    print "words[{}] = {}".format(i, Word)

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

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

2
fra

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

for w1 in words:
     if w1[0] == w1[len(w1) - 1]:
       c += 1
     print c

würde das Äquivalent Ihres Codes sein.

1
ShinTakezou

Der folgende Code gibt die Anzahl der Wörter aus, deren erster und letzter Buchstabe gleich sind. Getestet und verifiziert mit einem python Online Compiler :

words = ['aba', 'xyz', 'xgx', 'dssd', 'sdjh']  
count = 0  
for i in words:  
     if i[0]==i[-1]:
        count = count + 1  
print(count)  

Ausgabe:

$python main.py
3
1
ibsa
c=0
words = ['challa','reddy','challa']

for idx, Word in enumerate(words):
    if idx==0:
        firstword=Word
        print(firstword)
    Elif idx == len(words)-1:
        lastword=Word
        print(lastword)
        if firstword==lastword:
            c=c+1
            print(c)
0