2017-06-15 3 views
0

Ich habe dies mit den folgenden Listen getestet ["Mix", "Xanadu", "Apple", "Aardvark", "XYZ"] und ["BBB", "CCC", "AXX", "Xzz "," xaa "] und aus irgendeinem Grund sind die Zählungen für beide Listen unterschiedlich? Ich mache Probleme, weil die Funktion aus irgendeinem Grund die "xaa" nicht als Auslöser der if-Anweisung im zweiten Testfall aufnimmt. Was mir jedoch aufgefallen ist, ist, dass selbst die Zählung nicht zwischen den beiden liegt, und meine einzige Theorie ist, dass die if-Anweisung zuerst ausgeführt wird, so dass die Anzahl-Addition angibt, wie oft die if-Anweisung nicht ausgelöst wird.Addition oder IF innerhalb einer for-Schleife?

+1

** nicht eine Sammlung ändern Sie (Liste, ...), während über sie iterieren ** .. –

+0

Eigentlich habe ich das gerade probiert, und die Anzahl variiert immer noch. – a1letterword

+0

können Sie deep.copy (Ihre Liste) verwenden, um eine Kopie davon zu erstellen und die Kopie zu ändern – haifzhan

Antwort

1

Ihnen wurde gesagt "ändern Sie keine Liste, die Sie über iterieren" und das wird Ihr Problem beheben.

Sie können jedoch diese vereinfachen, wenn alles, was Sie tun, ist die Sortierung basierend auf, wenn ein Wort mit beginnt x + lexikalischen Ordnung, dann können Sie wie etwas tun:

>>> a = ["mix", "xanadu", "apple", "aardvark", "xyz"] 
>>> sorted(a, key=lambda x: (x[0] != 'x', x)) 
['xanadu', 'xyz', 'aardvark', 'apple', 'mix'] 

Dies funktioniert, weil x[0] != 'x'-0 entspricht wenn x[0] == 'x' und 1 wenn x[0] != 'x', und Tupel Bestellung alle x Worte an die Front erzwingt.

Wenn Sie die Anzahl der Wörter zu zählen, die mit x beginnen, dann können Sie:

>>> sum(x[0] == 'x' for x in a) 
2 
+0

Das ist definitiv richtig. Und ich sollte das tun, aber im Moment versuche ich nur die Grundlagen herauszufinden, warum meine Zählungen nicht funktionieren. – a1letterword

+0

Ich gehe davon aus, dass die "** keine' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'mit diesem Problem behoben haben. – AChampion

Verwandte Themen