Conversion liste de tuples en liste

Fermé
nuanda - 17 mai 2012 à 11:35
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 - 21 mai 2012 à 13:37
Bonjour,

J'ai un tableau "output" (lu depuis une base de données avec Python) qui semble etre une liste de tuples.

>>print output
[(12.2817, 12.2817), (0, 0), (8.52, 8.52)]

Je voudrais le convertir en un simple tableau 1D (=liste en Python je pense):

[12.2817, 12.2817, 0, 0, 8.52, 8.52]

ou en une matrice 2x3:
12.2817 12.2817
0 0
8.52 8.52

accessible ensuite avec "output[i][j]"

Quelqu'un aurait une méthode simple et *rapide* Dans les tutos trouvés sur Google, ça semble se faire via des boucles for, ce qui n'est peut etre pas le plus efficace. Le tableau que j'ai réellement à utiliser est beaucoup plus gros...

Merci!

3 réponses

heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 130
17 mai 2012 à 15:49
Bonjour,

L'objet [(12.2817, 12.2817), (0, 0), (8.52, 8.52)] dont tu parles n'est pas un tableau au sens qu'a le mot tableau en Python, langage dans lequel le mot tableau renvoie à la structure de données suivante:
https://docs.python.org/3/library/array.html#module-array
Ton objet est une liste de tuples, c'est tout.


Pour convertir en liste, tu peux faire
litu = [(12.2817, 12.2817), (0, 0), (8.52, 8.52)]  
from itertools import imap
unidim = sum(imap(list,litu),[])



Mais je pense que le mieux est encore de la façon suivante:
litu = [(12.2817, 12.2817), (0, 0), (8.52, 8.52)]  
unidim = [x for tu in litu for x in tu ]
Quel est l'inconvénient d'avoir deux boucles for ? Cette solution est mieux car il n'y a pas transformation de chaque tuple en liste avant son addition à la liste en cours d'extension, comme dans la précédente solution.




Pour représenter des matrices ou des tableaux, tu devrais voir du coté de Numpy.
NumPy is the fundamental package for scientific computing with Python. It contains among other things:
a powerful N-dimensional array object
sophisticated (broadcasting) functions
tools for integrating C/C++ and Fortran code
useful linear algebra, Fourier transform, and random number capabilities
http://numpy.scipy.org/


Numpy utilise un type d'objet qui est appelé array mais qui n'est pas le type array de Python. Les objets Numpy de type array sont des structures de données d'un type particulier propre à Numpy, qui a été défini pour obtenir une optimisation des opérations effectuée sur ce qu'on appelle tableaux et matrices dans le langage courant (c'est à dire pas les structures de données mais la représentation de données particulière qu'est graphiquement un tableau et l'être mathématique particiler qu'est une matrice).

NumPy's main object is the homogeneous multidimensional array. It is a table of elements (usually numbers), all of the same type, indexed by a tuple of positive integers.
(....)
Numpy's array class is called ndarray. It is also known by the alias array. Note that numpy.array is not the same as the Standard Python Library class array.array, which only handles one-dimensional arrays and offers less functionality.
http://www.scipy.org/Tentative_NumPy_Tutorial#head-6a1bc005bd80e1b19f812e1e64e0d25d50f99fe2
0