2016-06-26 13 views
1

Ich habe diesen Algorithmus in Python eine Liste der Namen alphabetisch zu sortieren, und ich kann nicht herausfinden, warum es nicht richtig this list wenn gegeben funktioniert:Warum funktioniert mein alphabetischer Sortieralgorithmus nicht?

for a in range(0,len(V)): 
    for b in range(a,len(V)): 
     equal=True 
     for N in range(0,min(len(V[a]),len(V[b]))): 
      if ord(V[b][N])<ord(V[a][N]): 
       V[b],V[a]=V[a],V[b] 
       equal=False 
       break 
     if equal==True and len(V[a])>len(V[b]): 
      V[b],V[a]=V[a],V[b] 
print(V) 
+3

Bitte definieren Sie * "funktioniert nicht richtig" *, und geben Sie einen [mcve] und nicht einen externen Link an. – jonrsharpe

+1

Verknüpfen Sie die Liste mit einer Handvoll Namen. Sprinkle in einigen Druckanweisungen, um Zwischenergebnisse zu sehen. Verwenden Sie auch aussagekräftige Namen V und N nicht wirklich zu verstehen, was Sie vorhaben? Und was ist mit dem Ord-Zeug? Python kann Zeichen direkt vergleichen –

+0

ich meinte, dass die Liste nicht sortiert wird, wenn es das Ergebnis gibt, und Entschuldigung für den externen Link, aber für diese Liste ['h', 'y', 'a', 'q', 'b', 'ab', 'abc'] und es druckte die richtige Ausgabe: ['a', 'ab', 'abc', 'b', 'h', 'q', 'y'] und wann angesichts der riesigen Liste dieser Site hat sie die Liste geändert, aber sie wurde nicht sortiert. – TanasaIoan

Antwort

1

Ah, ich fand das Problem. Versuchen Sie trocknen Sie Ihre Code auf diese beiden Beispiele ausgeführt wird:

V = ["ABCZ", "XYZA"] 
V = ["ABCE", "XYZF"] 

Für das erste Beispiel, Ihr, wenn die Bedingung, bis die letzten Zeichen nicht ausgelöst wird, ‚Z‘ (von „ABCZ“) und ‚A‘ (aus " XYZA ") werden verglichen.

if ord(V[b][N])<ord(V[a][N]): 

Das vertauscht falsch die zwei Zeichenfolgen.

+0

ich habe es danke, ich denke nach "wenn ord (V [b] [N]) TanasaIoan

0

warum nicht versuchen, so etwas wie alle Strings in einem Putting Liste und dann mit sort()

>>> str=["MARY","PATRICIA","LINDA","BARBARA","ELIZABETH","JENNIFER","MARIA","SUSAN",‌​"MARGARET","DOROTHY","LISA","NANCY"]; 
>>> str.sort(); 
>>> print str 

Ausgang:

['BARBARA', 'DOROTHY', 'ELIZABETH', 'JENNIFER', 'LINDA', 'LISA', 'MARGARET', 'MARIA', 'MARY', 'NANCY', 'PATRICIA', 'SUSAN'] 
+0

Ich versuchte mit str.sort(), aber wie folgt, print (str.sort()), denke, es wird mir eine neue sortierte Liste geben, anstatt die alte zu ändern, jetzt weiß ich, dass ich diese Funktion falsch verwendet. – TanasaIoan

Verwandte Themen