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]

3
HPJM 16 avril 2018 à 09:29

4 réponses

Meilleure réponse

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

5
Rakesh 16 avril 2018 à 06:31

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
0
Suneel Kushwaha 16 avril 2018 à 07:39

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']
0
MuhammadOsta 16 avril 2018 à 07:34

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']

-1
amulya349 16 avril 2018 à 06:34