2013-10-01 2 views
0

Я новичок в python им ищет код для пузырька сортировать список слов.Python Bubble сортировать слова

mylist = [12, 5, 13, 8, 9, 65] 

def bubble(badList): 
    length = len(badList) - 1 
    unsorted = True 

    while unsorted: 
     for element in range(0,length): 
      unsorted = False 
      if badList[element] > badList[element + 1]: 
       hold = badList[element + 1] 
       badList[element + 1] = badList[element] 
       badList[element] = hold 
       print badList 
      else: 
       unsorted = True 

print bubble(mylist) 

этот код делает это с цифрами, я хочу, чтобы он делал это со словами. Thanks

+3

Вы не пробовали с завязками? Это будет работать. –

+0

Здравствуйте, спасибо за ответ: D – user2833024

+0

Не могли бы вы объяснить, как я это сделаю? Спасибо – user2833024

ответ

1

Одна из многих интересных вещей о Python заключается в том, что операторы равенства и сравнения работают для строк так же, как и числа. Например, как сравнить, что два числа одинаковы?

7 == 7 # true! 

Как насчет двух строк?

"Hello world".equals("Hello world") // Java... 

"Hello world" == "Hello world" # Python! 

Теперь компараторам. Python использует лексикографическое упорядочение для сравнения строк. В основном, он смотрит на первого символа из каждой строки и говорит, «что больше?». Если они одинаковы, они продолжаются вниз по строке. Так несколько примеров:

"ABC" > "BAC" # false, because the character B is greater than A 
"AAAB" < "AAAC" # true, because the character B is less than C 

Таким образом, ваш код будет работать независимо от того, если mylist состоит из целых чисел или строк.

0

В вашем коде сортировки пузыря есть ошибка, что означает, что он не будет сортировать некоторые (возможно, большинство) списков правильно. Это не имеет ничего общего с типом данных значений в списке, хотя (он будет иметь те же проблемы со списками номеров или списков строк).

Вот фиксированный код:

def bubble(badList): 
    length = len(badList) - 1 
    unsorted = True 

    while unsorted: 
     unsorted = False    # this was moved out of the for loop 
     for element in range(0,length): 
      if badList[element] > badList[element + 1]: 
       hold = badList[element + 1] 
       badList[element + 1] = badList[element] 
       badList[element] = hold 
       print badList  # comment this out when you're done testing 
       unsorted = True  # this was moved up from the else block 

Он работает для обоих чисел и строк, как показано здесь:

lst = [12, 5, 13, 8, 9, 65] 
>>> bubble(lst) 
[5, 12, 13, 8, 9, 65] 
[5, 12, 8, 13, 9, 65] 
[5, 12, 8, 9, 13, 65] 
[5, 8, 12, 9, 13, 65] 
[5, 8, 9, 12, 13, 65] 
>>> lst 
[5, 8, 9, 12, 13, 65] 
>>> lst = ['a', 'list', 'of', 'words', 'foo', 'bar', 'baz'] 
>>> bubble(lst) 
['a', 'list', 'of', 'foo', 'words', 'bar', 'baz'] 
['a', 'list', 'of', 'foo', 'bar', 'words', 'baz'] 
['a', 'list', 'of', 'foo', 'bar', 'baz', 'words'] 
['a', 'list', 'foo', 'of', 'bar', 'baz', 'words'] 
['a', 'list', 'foo', 'bar', 'of', 'baz', 'words'] 
['a', 'list', 'foo', 'bar', 'baz', 'of', 'words'] 
['a', 'foo', 'list', 'bar', 'baz', 'of', 'words'] 
['a', 'foo', 'bar', 'list', 'baz', 'of', 'words'] 
['a', 'foo', 'bar', 'baz', 'list', 'of', 'words'] 
['a', 'bar', 'foo', 'baz', 'list', 'of', 'words'] 
['a', 'bar', 'baz', 'foo', 'list', 'of', 'words'] 
>>> lst 
['a', 'bar', 'baz', 'foo', 'list', 'of', 'words'] 
Смежные вопросы