2015-07-21 4 views
-3

Supposons que j'ai cette liste:Python tri Liste des Liste

newlis = [[3, 6, 4, 10], [1, 9, 2, 5], [0, 7, 8]] 

Je veux faire le tri d'une manière que chaque liste est triée. Par exemple:

newlis = [[3, 4, 6, 10], [1, 2, 5, 9], [0, 7, 8]] 

J'ai essayé d'écrire ce code:

for i in range(len(newlis)): 
    if j in newlis[i] < newlis[i+1]: 
     newlis[i],newlis[i+1]=newlis[i+1],newlis[i] 
print newlis 

Il ne fonctionne pas bien. Quelqu'un peut-il m'aider s'il vous plaît? Fonction intégrée ne sont pas autorisés.

+1

Pourquoi ne sont pas construits dans les fonctions permises? –

+0

Essayez de lire sur les algorithmes de tri. – raymelfrancisco

+3

Je serais très tenté de simplement implémenter [mergesort] (https://en.wikipedia.org/wiki/Merge_sort) moi-même et de faire quelque chose comme 'newlis = [mergesort (i) for i in newlis]' – NightShadeQueen

Répondre

2

Il y a beaucoup de choses qui ne vont pas ici (parmi lesquelles cela ressemble à une question de devoirs et nous ne sommes pas censés y répondre) mais je vais vous donner quelques conseils utiles: Vous comparez l'élément J dans la liste I à la liste I + 1.

vous voulez comparer élément J dans la liste I élément J + 1 dans la liste I.

en outre, vous semblez essayer de trier en arrière. Vous allez vous retrouver avec une grande gauche et une petite droite.

Il ne s'agit pas non plus d'un algorithme de tri. Que se passe-t-il lorsque vous avez un tableau comme

[3,6,4,10] => [6,4,10,3] 

qui n'est toujours pas commandé du tout. Les algorithmes de tri sont simples, mais pas si simples. Je recommande de les rechercher.

+0

Aussi, vérifiez votre syntaxe, vous avez essayé de raccourcir cette boucle interne mais j dans la liste je ne retourne rien. La syntaxe correcte serait 'pour j dans la gamme (len (i) - 1): si je [j] Javeed

0

En if j in newlis[i] < newlis[i+1]:, vous comparez les sous-listes et non les éléments des sous-listes elles-mêmes. Vous avez besoin de deux boucles, une pour l'itération sur newlis, et une pour trier les éléments de chaque sous-liste de newlis.

Un échantillon en utilisant Bubble Sort:

You can test it here:

>>> newlis = [[3, 6, 4, 10], [1, 9, 2, 5], [0, 7, 8]] 

>>> for sublist in newlis: 
...  for i in range(len(sublist) - 1): 
...   if sublist[i] > sublist[i + 1]: 
...    sublist[i], sublist[i + 1] = sublist[i + 1], sublist[i] 

>>> print(newlis) 
[[3, 4, 6, 10], [1, 2, 5, 9], [0, 7, 8]] 

Liens sur Sort Bubble:

http://www-ee.eng.hawaii.edu/~tep/EE160/Book/chap10/subsection2.1.2.2.html http://www.go4expert.com/articles/bubble-sort-algorithm-absolute-beginners-t27883/