essentiellement une combinaison de ceci:
[x[0] for x in sorted(MYLIST, key=len, reverse=True)] [x[0] for x in sorted(MYLIST, key=lambda i: i[1])]
3 Réponses :
Si nous disons que lst_of_lst
est la liste d'origine,
sorted_lst = [(len(lst), lst) for lst in lst_of_lst] sorted_lst = sorted(sorted_lst, reverse = True) sorted_lst = [lst for (length,lst) in sorted_lst]
sorted_lst
est la nouvelle liste triée.
Toutefois, ce code peut ne pas fonctionner selon la façon dont vous souhaitez traiter les cas où deux listes ont la même longueur.
Étant donné que sorted
et enumerate
sont des itérateurs, il n'est pas vraiment possible d'obtenir l'effet souhaité en les utilisant ensemble dans une seule boucle. Donc, à la place, nous recueillons les informations que vous voulez séparément.
old index: 0 new_index: 0 [1, 2, 3, 4, 5] old index: 3 new_index: 1 [1, 2, 3, 4] old index: 2 new_index: 2 [1, 2, 3] old index: 1 new_index: 3 [1, 2]
La sortie serait dans l'ordre inverse de la longueur (du plus grand au plus petit) en imprimant l'ancien et le nouveau index comme ceci:
nested_lists = [ [1, 2, 3, 4, 5], [1, 2], [1, 2, 3], [1, 2, 3, 4] ] # Capture original indices indexed_lists = [(index, sublist) for index, sublist in enumerate(nested_lists)] # sort them by length of sublist sorted_lists = sorted(indexed_lists, reverse=True, key=lambda item: len(item[1])) # Iterate over the sorted object, printing the old and new indexes for new_index, (old_index, sublist) in enumerate(sorted_lists): print('old index:', old_index, 'new_index:', new_index) print(sublist, end='\n\n')
Vous pouvez utiliser sorted
avec enumerate
et fournir à la méthode la key
et les paramètres reverse
. Ci-dessous, lst
est trié par longueur, puis inversé.
Par exemple, si vous avez une liste comme celle-ci:
[(1, [34, 34, 76, 23, 65]), (0, [29, 53, 27]), (2, [32, 39])]
Vous pouvez utiliser sorted
et enumerate
dans une seule ligne:
sorted_lst = sorted(enumerate(lst), key=lambda v: len(v[1]), reverse=True)
Qui renvoie une liste de tuples avec la position d'index d'origine comme première valeur et la liste comme deuxième valeur:
lst = [[29,53,27], [34,34,76,23,65], [32,39]]
veuillez fournir un exemple de code