statlist = [('abc',5,1), ('bzs',66,1), ... ]
sorted(statlist, key=lambda x: int(x[1]))
Je veux trier par l'entier le plus grand au plus petit. Dans ce cas, 5 et 66. Mais cela ne semble pas fonctionner.Pourquoi ne puis-je pas trier cette liste?
statlist = [('abc',5,1), ('bzs',66,1), ... ]
sorted(statlist, key=lambda x: int(x[1]))
Je veux trier par l'entier le plus grand au plus petit. Dans ce cas, 5 et 66. Mais cela ne semble pas fonctionner.Pourquoi ne puis-je pas trier cette liste?
La fonction sorted
retourne une nouvelle liste de sorte que vous devrez affecter les résultats de la fonction comme ceci:
new_list = sorted(statlist, key=lambda x: int(x[1]))
Cela ne fait pas ce que demande le PO, en citant "l'entier le plus grand au plus petit". –
Sans rapport avec cela, mais quelqu'un pourrait-il me dire ce que signifie OP? Je l'ai vu dans d'autres messages aussi. Merci –
Affiche originale. Puisque SO fonctionne comme un wiki, nous nous référons au tout premier utilisateur de cette façon, cela différencie ce qu'il a écrit de ce qui a été corrigé. –
Vous pouvez passer, la clé et la fonction inverse de .Sort
>>> x.sort(key=lambda x:x[1],reverse=True)
>>> x
[('bzs', 66, 1), ('abc', 5, 1)]
>>>
>>> s = [('xyz', 8, 1), ('abc',5,1), ('bzs',66,1) ]
>>> s = sorted(s, key=lambda x: int(x[1]))
>>> s.reverse()
>>> print s
[('bzs', 66, 1), ('xyz', 8, 1), ('abc', 5, 1)]
utiliser la méthode .sort
au lieu de tri:
statlist = [('abc',5,1), ('bzs',66,1), ... ]
statlist.sort(key=lambda x: int(x[1]))
Si vous souhaitez utiliser sorted
, puis réattribuer la variable:
statlist = [('abc',5,1), ('bzs',66,1), ... ]
statlist = sorted(statlist, key=lambda x: int(x[1]))
Pour tri décroissant, utilisez reverse
:
statlist = [('abc',5,1), ('bzs',66,1), ... ]
statlist = sorted(statlist, key=lambda x: int(x[1]), reverse=True)
Ensuite, vous feriez mieux d'utiliser itemgetter
au lieu d'un lambda
:
import operator
statlist = [('abc',5,1), ('bzs',66,1), ... ]
statlist = sorted(statlist, key=operator.itemgetter(1), reverse=True)
from operator import itemgetter
statlist = [('abc',5,1), ('bzs',66,1), ... ]
# statlist.sort modifiest the statlist, sorted returns a new one
# reverse puts the largest items to the front
statlist.sort(key=itemgetter(1), reverse=True)
pour le tri inplace
statlist.sort(key=lambda x: x[1])
pour créer une autre liste, avec les données triées utilisent
otherlist = sorted(statlist, key=lambda x: x[1])
En réponse au commentaire de alex qu'il pensait que Sorted() a travaillé "comme la fonction de tri" :
Si cela a fonctionné "comme la fonction de tri", il est peu probable qu'il ait été placé dans la bibliothèque.
Dans tous les cas, il n'y a pas de tri fonction ... vous faites référence à la méthode de tri d'objets de la liste.
démonstration simple en utilisant l'interpréteur interactif:
>>> alist = [3, 2, 1]; x = alist.sort(); print x; print alist
None
[1, 2, 3]
>>> alist = [3, 2, 1]; x = sorted(alist); print x; print alist
[1, 2, 3]
[3, 2, 1]
Voici une astuce: des patrons et des similitudes, mais toujours vérifier vos extrapolations intuitives. Vous pouvez appliquer ces idées à reverse
et reversed
.
Hey chaque fois que je sauve quelque chose à un tableau, je ne tends pas à vous soucier de l'ordre et à la fin j'utilise sorted()
par exemple comme celui-ci statlist = sorted(statlist)
et si on voulait le plus grand au plus petit statlist = sorted(statlist, reverse = True)
C'est la façon simple devenir plus grand au plus petit!
code exemple où je l'ai utilisé ce (juste un extrait)
while i <= math.sqrt(intnum):
if (intnum % i) == 0:
numbers.insert(0,i)
numbers.insert(0,int(intnum/i))
print(i,":", int(intnum/i))
i += 1
numbers = sorted(numbers, reverse = True)
Que voulez-vous dire par « ne semble pas fonctionner?"S'il vous plaît, fournissez la trace d'erreur ou le problème spécifique que vous avez * réellement * –
De plus, avec trois questions d'une nature n00b un dimanche après-midi, je devine que c'est devoirs.Veuillez marquer clairement les devoirs –
J'ai oublié de mettre Je pensais que ça fonctionnait comme la fonction "sort" – TIMEX