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