Maison >développement back-end >Tutoriel Python >Comment puis-je partitionner efficacement une liste en fonction d'une condition ?

Comment puis-je partitionner efficacement une liste en fonction d'une condition ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-13 16:23:20394parcourir

How Can I Efficiently Partition a List Based on a Condition?

Partitionnement de listes en fonction de conditions

Lors de la division d'une liste en deux en fonction d'une condition donnée, il est tentant de parcourir la liste deux fois, créer deux nouvelles listes comme suit :

good = [x for x in mylist if x in goodvals]
bad = [x for x in mylist if x not in goodvals]

Cependant, cette approche nécessite deux itérations distinctes sur la liste, ce qui peut être inefficace. Pour améliorer les performances, pensez à utiliser une itération manuelle avec ajout conditionnel :

good, bad = [], []
for x in mylist:
    (bad, good)[x in goodvals].append(x)

Dans ce code :

  • On initialise deux listes vides, bonnes et mauvaises, pour stocker les éléments partitionnés .
  • On parcourt les éléments de mylist.
  • Pour chaque élément x, on utilise l'expression (mauvais, good)[x in goodvals] pour sélectionner la liste appropriée en fonction de la condition x dans goodvals.
  • Cette expression est évaluée comme mauvaise si x ne remplit pas la condition et comme bonne dans le cas contraire.
  • Nous ajoutons x à la liste sélectionnée à l'aide de la méthode append.

Cette approche évite le besoin de deux itérations distinctes, améliorant les performances en réduisant le nombre de parcours de liste de deux contre un. Il est également considéré comme plus élégant, car il capture la logique de partitionnement de manière concise et lisible.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn