2016-06-26 4 views
1

Я сделал этот алгоритм в Python, чтобы отсортировать список имен в алфавитном порядке, и я не могу понять, почему он не работает должным образом, когда данный this list:Почему мой алгоритм сортировки по алфавиту не работает?

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

Пожалуйста, определите * «Не работает должным образом» * и дайте [mcve], а не ссылку за пределы участка. – jonrsharpe

+1

Составьте список до нескольких имен. Посыпьте в некоторых заявлениях печати, чтобы увидеть промежуточные результаты. Также использовать значащие имена V и N действительно не помогают понять, что вы делаете? И что же с ордом? python может сравнивать символы напрямую –

+0

Я имел в виду, что список не сортируется, когда он дает результат, и извините за ссылку за пределами сайта, но для этого списка ['h', 'y', 'a', 'q', 'b', 'ab', 'abc'] и напечатал правильный вывод: ['a', 'ab', 'abc', 'b', 'h', 'q', 'y'] и когда учитывая огромный список с этого сайта, он изменил список, но он не был отсортирован. – TanasaIoan

ответ

1

Ах, я нашел проблему. Попробуйте сухого хода код на этих двух примерах:

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

Для первого примера, ваш, если условие не срабатывает до последних символов, «Z» (от «ABCZ») и «А» (от " XYZA ").

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

Это неправильно заменяет две строки.

+0

Я получил благодарность, я думаю, что после «если ord (V [b] [N]) TanasaIoan

0

почему бы не попробовать что-то вроде положить все строки в список и затем с помощью sort()

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

Выход:

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

Я попытался использовать str.sort(), но вот так: print (str.sort()), думая, что он даст мне новый отсортированный список вместо того, чтобы модифицировать старый, теперь я знаю, что неправильно использовал эту функцию. – TanasaIoan

Смежные вопросы