Je suis assez nouveau sur Python et je me demandais comment j'aplatis la liste imbriquée suivante en utilisant la compréhension de liste, et j'utilise également la logique conditionnelle.
nested_list = [[1,2,3], [4,5,6], [7,8,9]]
Ce qui suit renvoie une liste imbriquée, mais lorsque j'essaie d'aplatir la liste en supprimant les crochets intérieurs, j'obtiens des erreurs.
odds_evens = [['odd' if n % 2 != 0 else 'even' for n in l] for l in nested_list]
4 réponses
Votre syntaxe était un peu erronée. Essayez l'extrait ci-dessous.
nested_list = [[1,2,3], [4,5,6], [7,8,9]]
odds_evens = ['odd' if n % 2 != 0 else 'even' for l in nested_list for n in l]
print(odds_evens)
Sortie:
['odd', 'even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd']
Compréhension des listes imbriquées
Qu'est-ce qui ne va pas ici?
>>> nested_list = [[1,2,3], [4,5,6], [7,8,9]]
>>> odds_evens = ['odd' if n % 2 != 0 else 'even' for 1 in nested_list for n in 1]
File "<stdin>", line 1
SyntaxError: can't assign to literal
Lire les données de la liste imbriquée et les exporter vers une liste plate en fonction de la condition
nested_list = [[1,2,3], [4,5,6], [7,8,9]]
flat_list = [item for sublist in nested_list for item in sublist]
# >>> [1, 2, 3, 4, 5, 6, 7, 8, 9]
flat_list_even = [item for sublist in nested_list for item in sublist if item % 2 == 0]
# >>> [2, 4, 6, 8]
flat_list_odd = [item for sublist in nested_list for item in sublist if item % 2 != 0]
# >>> [1, 3, 5, 7, 9]
flat_list_literal = ["even" if item % 2 == 0 else "odd" for sublist in nested_list for item in sublist]
# >>> ['odd', 'even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd']
Pour créer une liste plate, vous devez avoir un ensemble de crochets dans le code de compréhension. Essayez le code ci-dessous:
odds_evens = ['odd' if n%2!=0 else 'even' for n in l for l in nested_list]
Production:
['odd', 'odd', 'odd', 'even', 'even', 'even', 'odd', 'odd', 'odd']
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.