2016-07-21 15 views
1

Ich versuche herauszufinden, warum ich eine leere Liste bekomme, wenn dieser Code ausgeführt wird. Das Ziel ist, eine Zeichenkette zu nehmen, den Index aller Vokale zu finden und diesen Index an eine Liste anzuhängen. Mit einem Index, der bei eins statt bei null beginnt. Irgendwelche Tipps, wo der Fehler auftreten könnte, wäre großartig! Wenn Sie eine allgemeine Aufsicht haben, informieren Sie mich bitte. Relativ neu für Python.Appending Vowel Ort Python

dank
def vowel_indices(word): 
    vowels = ["a", "e", "i", "o", "u"] 
    vowel_idx = [] 
    word.lower() 
    for idx, letter in enumerate(word, start = 1): 
     if letter == vowels: 
      vowel_idx.append(idx) 
     return vowel_idx  

Antwort

1

if letter == vowels: sollte if letter in vowels:

Vokale sein ist eine Liste und eine Zeichenfolge kann nie zu einer Liste gleich sein, und Sie sollen auch die Rückkehr aus der Schleife bewegen, wie das wird die Stop-Funktion darin Spur das erste Mal, es Schleifen durch

1

Methode lower nicht die Zeichenfolge in-place (Strings sind unveränderlich) nicht verändert, so sollten Sie stattdessen tun:

word = word.lower() 

dann für die Mitgliedschaft eines Zeichens in der Liste der vowels zu überprüfen, sollten Sie die in Operator verwenden und nicht ==:

if letter in vowels: 

Und dann die return Anweisung sollte nicht innerhalb der for platziert werden Schleife, da dies die Funktion sofort zurück nach der ersten Iteration machen, was nicht das, was Sie beabsichtigen:

for idx, letter in enumerate(word, start = 1): 
    if letter in vowels: 
     vowel_idx.append(idx) 
return vowel_idx 

Auf einer zusätzlichen Anmerkung, können Sie weniger ausführlich sein und den gesamten Betrieb tun, um eine Liste Verständnis mit:

def vowel_indices(word): 
    return [idx for idx, l in enumerate(word.lower(), 1) if l in vowels] 
+0

Auch die return-Anweisung ist aus Ort. – Alex

+0

@Alex Ja, das auch –

+0

Danke, das hat viel für mich geklärt! – eeskonivich

1

Es große Arbeit

def vowel_indices(word): 
    vowels = ["a", "e", "i", "o", "u"] 
    word.lower() 
    indexes = [index for c,index in zip(word,range(len(word))) if c in vowels] 
    print(indexes) 
+0

Das funktioniert nicht wie OP will und warum benutzen Sie 'zip'? –

+0

zip ist für die Lokalisierung von Zeichen in Wörtern und zip verwenden kombiniert Wort und Bereich() – Amit

+0

Aber warum verwenden Sie es über 'enumerate'? –