web-dev-qa-db-fra.com

Aplatir la liste des listes

J'ai un problème avec les crochets en Python. J'ai écrit un code qui produit la sortie suivante:

[[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]]

Mais je voudrais faire quelques calculs avec ça, mais les crochets ne me le permettent pas.

Comment puis-je enlever les crochets? J'ai vu quelques exemples pour le faire mais je ne pouvais pas les appliquer à ce cas.

82
Hellfish

Aplatissez la liste à "supprimez les crochets" en utilisant une compréhension de liste imbriquée. Cela désimbrellera chaque liste stockée dans votre liste de listes!

list_of_lists = [[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]]
flattened = [val for sublist in list_of_lists for val in sublist]

Les compréhensions de liste imbriquées évaluent de la même manière qu’elles sont déroulées (c’est-à-dire ajouter une nouvelle ligne et un onglet pour chaque nouvelle boucle. Donc, dans ce cas:

flattened = [val for sublist in list_of_lists for val in sublist]

est équivalent à:

flattened = []
for sublist in list_of_lists:
    for val in sublist:
        flattened.append(val)

La grande différence est que la liste compilée évalue BEAUCOUP plus rapidement que la boucle déchirée et élimine les appels d'ajout!

Si vous avez plusieurs éléments dans une sous-liste, la composition de liste sera même aplatie. c'est à dire

>>> list_of_lists = [[180.0, 1, 2, 3], [173.8], [164.2], [156.5], [147.2], [138.2]]
>>> flattened  = [val for sublist in list_of_lists for val in sublist]
>>> flattened 
[180.0, 1, 2, 3, 173.8, 164.2, 156.5, 147.2,138.2]
142
Paul Seeb

Je voudrais utiliser itertools.chain - cela permettra également de> 1 élément dans chaque sous-liste:

from itertools import chain
list(chain.from_iterable([[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]]))
99
Jon Clements

Donné

d = [[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]]

et votre question spécifique : - Comment puis-je enlever les crochets?

Utilisation de la compréhension de liste:

new_d = [i[0] for i in d]

vais vous donner ceci

[180.0, 173.8, 164.2, 156.5, 147.2, 138.2]

vous pouvez ensuite accéder à des éléments individuels avec l’index approprié, par exemple, new_d[0] vous donnera 180.0 etc. que vous pourrez ensuite utiliser pour les mathématiques.

Si vous allez avoir une collection de données, vous aurez une sorte de parenthèse ou de parenthèse.

Note, cette solution vise spécifiquement votre question/problème, elle ne fournit pas de solution généralisée . C'est-à-dire que cela fonctionnera pour votre cas.

17
Levon
>>> lis=[[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]]
>>> [x[0] for x in lis]
[180.0, 173.8, 164.2, 156.5, 147.2, 138.2]
1
Ashwini Chaudhary