Python >> Tutoriel Python >  >> Python

Comment trier et renvoyer une liste Python en une seule ligne ?

Pour trier et retourner une liste Python en une seule ligne de code, utilisez le sorted(list) méthode qui renvoie une nouvelle liste d'éléments triés. Il copie uniquement les références aux éléments d'origine afin que la liste renvoyée ne soit pas une copie profonde mais une copie superficielle.

Plongeons dans le défi pour en savoir plus sur les détails et les alternatives. Tout n'est pas toujours simple. En étudiant les différentes méthodes qui résolvent ce problème, vous deviendrez un meilleur codeur !

Problème :étant donné une liste d'objets comparables tels que des entiers ou des flottants. Existe-t-il un moyen de trier la liste et de renvoyer la liste triée dans une seule ligne de code Python ?

Exemple :Supposons que vous ayez la liste suivante.

a = [4, 2, 1, 3]

Vous souhaitez trier cette liste et renvoyer le résultat sur une seule ligne. Si vous utilisez le list.sort() méthode, la valeur de retour est None :

print(a.sort())
# None

La valeur de retour du list.sort() la méthode est None , mais de nombreux codeurs s'attendent à ce qu'il s'agisse de la liste triée. Ils sont donc surpris de découvrir que leurs variables contiennent le None type plutôt qu'une liste triée.

Cependant, retourner None est parfaitement logique pour le list.sort() méthode. Pourquoi? Parce que vous appelez la méthode sur un objet de liste et qu'elle modifie cet objet de liste exact. Il ne crée pas de nouvelle liste - il n'y aura pas de nouvel objet de liste en mémoire.

Alors, comment trier et retourner une liste en une seule ligne de code Python ? En règle générale, il existe toujours plusieurs façons d'accomplir la même chose en Python. Découvrons les différentes manières d'y parvenir !

Voici un bref aperçu des méthodes abordées dans cet article :

Exercice :Modifier la liste à trier en ajoutant des flottants négatifs. Ça marche toujours ?

Vous allez maintenant en savoir plus sur chacune des méthodes.

Méthode 1 :trié()

Le moyen le plus simple d'accomplir cette tâche est d'appeler le sorted() intégré de Python. fonction qui prend un itérable et renvoie une nouvelle liste avec des éléments triés.

a = [4, 2, 1, 3]

# Method 1: sorted()
print(sorted(a))

Le sorted() la fonction génère une nouvelle liste triée qui est placée dans le print() fonction qui imprime la liste triée dans le shell. La sortie est la liste triée :

[1, 2, 3, 4]

Cette méthode est la plus pythonique. Mais existe-t-il des alternatives ?

Méthode 2 :list.sort() + opérateur ternaire

Le sorted() La méthode laisse la liste d'origine inchangée. Mais que se passe-t-il si vous souhaitez trier la liste d'origine et obtenir cette liste d'origine en tant que sortie que vous pouvez affecter à une variable ?

La réponse est simple :utilisez une combinaison de list.sort() méthode et l'opérateur ternaire !

a = [4, 2, 1, 3]

# Method 2: list.sort() + ternary
print(a if a.sort() else a)
# [1, 2, 3, 4]

Vous devez comprendre deux concepts :(1) list.sort() et (2) l'opérateur ternaire :

  1. Le list.sort() La méthode trie les éléments de la liste en place de manière ascendante. Pour personnaliser le comportement de tri par défaut, utilisez le key facultatif argument en passant une fonction qui renvoie une valeur comparable pour chaque élément de la liste.
  2. L'opérateur ternaire x if c else y se compose de trois opérandes x , c , et y . Il renvoie x si l'expression booléenne c évalue à True . Sinon, si l'expression c évalue à False , l'opérateur ternaire renvoie l'alternative y .

La belle chose est que le one-liner print(a if a.sort() else a) modifie la liste d'origine et la renvoie immédiatement. Comment fait-il cela ?

Explication :Tout d'abord, le a.sort() La méthode est appelée pour vérifier quelle "branche" de l'opérateur ternaire doit être visitée. La valeur de retour de a.sort() sera toujours None . Le None la valeur est automatiquement convertie en booléen False . Ainsi, l'opérateur ternaire renvoie toujours l'objet liste référencé par la variable a .

Notez que le seul but de l'opérateur ternaire est de s'assurer d'appeler le a.sort() méthode avant de retourner la valeur a — pour s'assurer qu'il est trié !

Si vous imprimez la liste d'origine dans le shell, vous verrez qu'elle est maintenant triée :

>>> print(a)
[1, 2, 3, 4]

Méthode 3 :combiner plusieurs instructions sur une seule ligne avec un point-virgule

Une alternative consiste à enchaîner les instructions avec un point-virgule ; pour unifier un extrait de code Python. Cette stratégie fonctionne avec des programmes Python plats sans, éventuellement, des blocs imbriqués :

a = [4, 2, 1, 3]

# Method 3: semicolon
a.sort(); print(a)
# [1, 2, 3, 4]

Si vous devez trier une liste Python et imprimer sa valeur de retour dans le shell, par exemple parce que vous exécutez cette commande à partir de la ligne de commande ou du terminal, vous pouvez utiliser cette excellente stratégie.

Vous pouvez en savoir plus sur la façon d'unifier n'importe quel programme Python dans ma vidéo suivante :

Livre Python One-Liners :maîtrisez d'abord la ligne unique !

Les programmeurs Python amélioreront leurs compétences en informatique avec ces lignes utiles.

Python One-Liners vous apprendra à lire et à écrire des « lignes simples » :des déclarations concises de fonctionnalités utiles regroupées dans une seule ligne de code. Vous apprendrez à décompresser et à comprendre systématiquement n'importe quelle ligne de code Python, et à écrire du Python éloquent et puissamment compressé comme un expert.

Les cinq chapitres du livre couvrent (1) les trucs et astuces, (2) les expressions régulières, (3) l'apprentissage automatique, (4) les principaux sujets de science des données et (5) les algorithmes utiles.

Des explications détaillées des one-liners introduisent les concepts clés de l'informatique etdéveloppez vos compétences en matière de codage et d'analyse . Vous découvrirez les fonctionnalités Python avancées telles que la compréhension de liste , tranchage , fonctions lambda , expressions régulières , carte et réduire fonctions et affectations de tranches .

Vous apprendrez également à :

  • Exploiter les structures de données pour résoudre des problèmes réels , comme utiliser l'indexation booléenne pour trouver des villes avec une pollution supérieure à la moyenne
  • Utiliser les bases de NumPy comme tableau , forme , axe , tapez , diffusion , indexation avancée , tranchage , tri , recherche , agrégation , et statistiques
  • Calculer des statistiques de base de tableaux de données multidimensionnels et les algorithmes K-Means pour l'apprentissage non supervisé
  • Créer davantage d'expressions régulières avancées en utilisant le regroupement et groupes nommés , anticipations négatives , caractères échappés , espaces blancs, jeux de caractères (et jeux de caractères négatifs ) et opérateurs gourmands/non gourmands
  • Comprendre un large éventail de sujets informatiques , y compris les anagrammes , palindromes , surensembles , permutations , factorielles , nombres premiers , Fibonacci chiffres, obscurcissement , recherche , et tri algorithmique

À la fin du livre, vous saurez comment écrire Python dans sa forme la plus raffinée , et créez de belles pièces concises d'"art Python" en une seule ligne.

Obtenez vos Python One-Liners sur Amazon !!