Comment aplatir une liste de listes en Python
Apprenez à aplatir une liste de listes en Python. Comparez les compréhensions de listes imbriquées, itertools.chain, sum et les méthodes récursives avec des exemples de code.
Aperçu
Lorsque vous travaillez avec des calculs matriciels, des lignes de base de données ou des arbres de données analysés, vous rencontrerez fréquemment des structures imbriquées, telles qu'une liste de listes : `[[1, 2], [3, 4]]`. Aplatir cette structure signifie la convertir en une liste unidimensionnelle contenant tous les éléments individuels : `[1, 2, 3, 4]`. Python propose plusieurs méthodes élégantes pour y parvenir.
La manière la plus courante et la plus pythonique d'aplatir une liste de listes consiste à utiliser une compréhension de liste imbriquée : `[élément de sous-liste dans la matrice pour élément de sous-liste]`. Bien que la syntaxe puisse sembler légèrement contre-intuitive au début car les boucles sont écrites dans le même ordre qu'une boucle « for » imbriquée, elle est hautement optimisée, rapide et ne nécessite pas l'importation de bibliothèques externes.
Alternativement, vous pouvez utiliser la fonction `chain.from_iterable()` du module `itertools`. Il s'agit de l'approche la plus efficace en termes de mémoire, car elle renvoie un itérateur qui génère des éléments paresseusement plutôt que d'allouer immédiatement une nouvelle liste en mémoire. Pour les listes profondément imbriquées (avec une profondeur arbitraire), vous devez écrire une fonction génératrice récursive pour décompresser tous les niveaux.
Sortie de code et d'exécution
Ce script montre l'aplatissement d'une liste de listes à l'aide de compréhensions de liste, d'itertools.chain et de décompression récursive.
import itertools
matrix = [[1, 2, 3], [4, 5], [6, 7, 8]]
# Method 1: List comprehension (Pythonic and fast)
flat_comp = [item for sublist in matrix for item in sublist]
print("List comprehension:", flat_comp)
# Method 2: itertools.chain (Highly memory efficient)
flat_chain = list(itertools.chain.from_iterable(matrix))
print("itertools.chain:", flat_chain)
# Method 3: Recursive function for deep/irregular nesting
irregular = [1, [2, 3], [[4, 5], 6]]
def flatten_deep(items):
result = []
for item in items:
if isinstance(item, list):
result.extend(flatten_deep(item))
else:
result.append(item)
return result
print("Deep flatten:", flatten_deep(irregular))List comprehension: [1, 2, 3, 4, 5, 6, 7, 8]
itertools.chain: [1, 2, 3, 4, 5, 6, 7, 8]
Deep flatten: [1, 2, 3, 4, 5, 6]Mise en œuvre étape par étape
- Utilisez une compréhension de liste imbriquée [élément pour la sous-liste dans la liste_imbriquée pour l'élément dans la sous-liste] pour les structures 2D plates.
- Importez itertools et appelez itertools.chain.from_iterable(nested_list) pour une évaluation paresseuse et respectueuse de la mémoire.
- Définissez une fonction récursive vérifiant isinstance(item, list) pour gérer les collections arbitrairement imbriquées.
Foire aux questions
Puis-je utiliser la fonction sum() pour aplatir les listes ?
Oui, sum(matrix, []) fonctionnera, mais c'est fortement déconseillé. Il s'exécute avec une complexité O(N^2) car il crée une nouvelle copie de liste à chaque ajout, ce qui entraîne des performances épouvantables pour les grands ensembles de données.
Quelle est la méthode la plus rapide pour aplatir des listes de listes ?
itertools.chain.from_iterable() est généralement le plus rapide, suivi de près par les compréhensions de listes imbriquées.
Sujets connexes
Apprenez à utiliser les compréhensions de listes en Python. Écrivez des boucles concises, appliquez des filtres conditionnels et créez des matrices avec une syntaxe visuelle claire.
Comment découper une liste en PythonApprenez à découper des listes en Python à l'aide de la puissante syntaxe entre crochets. Maîtrisez les arguments de démarrage, d’arrêt et d’étape, l’indexation négative et les listes d’inversion.
Ressources Python recommandées
Développez vos connaissances avec des didacticiels interactifs, des aide-mémoire et des comparaisons de codes associés.
Variables et types de données Python expliqués
Comprendre les variables Python et les types de données de base (chaînes, entiers, flottants, booléens). Un guide complet pour débutants sur l'affectation de mémoire en Python.
Aide-mémoire sur les méthodes de liste Python
Guide de référence rapide pour les opérations de liste Python. Maîtrisez l’ajout, l’insertion, la suppression, le tri et le découpage d’éléments.
Python vs JavaScript : quel langage de programmation est le meilleur ?
Une comparaison complète entre Python et JavaScript. Explorez les différences de syntaxe, les performances, les cas d'utilisation (backend et frontend) et des exemples de codage.