2013-10-01 3 views
0

Je suis nouveau à python im la recherche d'un code à bulle trier une liste de mots.Python tri Bubble Mots

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) 

ce code, il fait avec des chiffres que je veux un qu'il fait avec des mots. Merci

+3

Avez-vous pas essayé avec des cordes? Ça va marcher. –

+0

Bonjour merci pour la réponse: D – user2833024

+0

Pourriez-vous s'il vous plaît explane comment je le ferais? Merci – user2833024

Répondre

1

L'un des nombreux avantages de Python est que les opérateurs d'égalité et de comparaison travaillent pour les chaînes comme pour les nombres. Par exemple, comment comparer que deux nombres sont les mêmes?

7 == 7 # true! 

Que diriez-vous de deux chaînes?

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

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

Maintenant aux comparateurs. Python utilise l'ordre lexicographique pour comparer les chaînes. Fondamentalement, il regarde le premier caractère de chaque chaîne et dit, "qui est plus grand?". Si elles sont identiques, elles continuent sur la chaîne. Ainsi, quelques exemples:

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

Ainsi, votre code ne fonctionnera peu importe si mylist est composé de ints ou de chaînes.

0

Il y a un bug dans votre code de tri bulle qui signifie qu'il ne sera pas trier certains (peut-être plus) répertorie correctement. Cela n'a rien à voir avec le type de données des valeurs dans la liste (il aura les mêmes problèmes avec des listes de nombres ou des listes de chaînes).

est ici code fixe:

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 

Il fonctionne aussi bien pour les nombres et les chaînes, comme indiqué ici:

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']