@bzupnick, utilisez key=lambda x:x[2].casefold(). Si votre Python n'est pas assez nouveau, utilisez-le à la .lower()place de.casefold()
John La Rooy
x = [[[5,3], 1.0345], [[5,6], 5.098], [[5,4], 4.89], [[5,1], 5.97]] Avec une liste comme celle-ci, on peut on trie en utilisant itemgetter () par rapport aux éléments de x [0] [1]?
nidHi
Puis-je également obtenir les index du tri, afin de trier une autre liste de listes associées dans le même ordre?
quarky
@quaryk Cela ressemble à une question intéressante, mais ne convient pas pour répondre dans les commentaires. Si vous ne trouvez pas une question qui la couvre, vous devez en créer une.
John La Rooy
175
en place
>>> l =[[0,1,'f'],[4,2,'t'],[9,4,'afsd']]>>> l.sort(key=lambda x: x[2])
Pourriez-vous donner plus de détails sur in placeet not in place?
Qun
9
@qun, "in place" signifie que la mémoire de l'ancienne liste est réutilisée pour celle triée. "pas en place" signifie que l'ancienne liste reste inchangée et qu'une nouvelle liste est créée.
John La Rooy du
x = [[[5,3], 1.0345], [[5,6], 5.098], [[5,4], 4.89], [[5,1], 5.97]] Avec une liste comme celle-ci, comment trier par rapport aux éléments de x [0] [1]?
nidHi
81
Itemgetter vous permet de trier selon plusieurs critères / colonnes:
Je pense que cette réponse est très importante. Je pense que les gens qui essaient de trier par index de tableau interne tomberont ici, mais ceux qui cherchent à trier par MULTIPLE index de tableau interne commenceront ici et votre réponse m'a aidé à voir que itemgetter le fera réellement pour vous!
ZekeDroid
11
plusieurs critères peuvent également être mis en œuvre via la fonction lambda
Je pense que la fonction lambda peut résoudre votre problème.
old_list =[[0,1,'f'],[4,2,'t'],[9,4,'afsd']]#let's assume we want to sort lists by last value ( old_list[2] )
new_list = sorted(old_list, key=lambda x: x[2])#Resulst of new_list will be:[[9,4,'afsd'],[0,1,'f'],[4,2,'t']]
**old_list =[[0,1,'f'],[4,2,'t'],[9,4,'afsd']]#let's assume we want to sort lists by last value ( old_list[2] )
new_list = sorted(old_list, key=lambda x: x[2])**
corrigez-moi si je me trompe, mais le «x [2]» n'appelle-t-il pas le 3e élément de la liste, pas le 3e élément de la liste imbriquée? devrait-il être x [2] [2]?
Non, car la clé / lambda parcourt déjà les éléments de la liste de premier niveau. x est une variable locale liée à tour de rôle à chaque élément.
DragonLord
1
Plus facile à comprendre (que fait réellement Lambda):
ls2=[[0,1,'f'],[4,2,'t'],[9,4,'afsd']]def thirdItem(ls):#return the third item of the listreturn ls[2]#Sort according to what the thirdItem function return
ls2.sort(key=thirdItem)
arr=[[2,1],[1,2],[3,5],[4,5],[3,1],[5,2],[3,8],[1,9],[1,3]]
arr.sort(key=lambda x:x[0])
la=set([i[0]for i inPoints])for i in la:
tempres=list()for j in arr:if j[0]==i:
tempres.append(j[1])for j in sorted(tempres,reverse=True):print(i,j)
Réponses:
Ceci est un travail pour itemgetter
Il est également possible d'utiliser une fonction lambda ici, mais la fonction lambda est plus lente dans ce cas simple
la source
key=lambda x:x[2].casefold()
. Si votre Python n'est pas assez nouveau, utilisez-le à la.lower()
place de.casefold()
en place
pas en place en utilisant trié:
la source
in place
etnot in place
?Itemgetter vous permet de trier selon plusieurs critères / colonnes:
la source
plusieurs critères peuvent également être mis en œuvre via la fonction lambda
la source
Vous pouvez facilement trier à l'aide de cet extrait de code, où 1 est l'index de l'élément.
la source
Comme ça:
la source
Je pense que la fonction lambda peut résoudre votre problème.
la source
corrigez-moi si je me trompe, mais le «x [2]» n'appelle-t-il pas le 3e élément de la liste, pas le 3e élément de la liste imbriquée? devrait-il être x [2] [2]?
la source
Plus facile à comprendre (que fait réellement Lambda):
la source
Le tri d'un tableau multidimensionnel s'exécute ici
la source