120 votes

Transformer une "liste de tuples" en une liste plate ou une matrice

Avec Sqlite, un select .. from La commande renvoie les résultats output qui imprime :

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

Il semble s'agir d'une liste de tuples. Je voudrais soit convertir output à une simple liste :

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

ou une matrice 2x3 :

12.2817 12.2817
0          0 
8.52     8.52

à lire via output[i][j]

La commande flatten ne fait pas l'affaire pour la 1ère option, et je n'ai aucune idée pour la seconde...

Une solution rapide serait appréciée, car les données réelles sont beaucoup plus importantes.

9voto

Charles Beattie Points 2637

Utiliser itertools chaîne :

>>> import itertools
>>> list(itertools.chain.from_iterable([(12.2817, 12.2817), (0, 0), (8.52, 8.52)]))
[12.2817, 12.2817, 0, 0, 8.52, 8.52]

7voto

Maria Zverina Points 4358

Ou vous pouvez aplatir la liste comme ceci :

reduce(lambda x,y:x+y, map(list, output))

5voto

Joshua Cook Points 2757

C'est ce que numpy a été conçu pour, tant du point de vue des structures de données que de la vitesse.

import numpy as np

output = [(12.2817, 12.2817), (0, 0), (8.52, 8.52)]
output_ary = np.array(output)   # this is your matrix 
output_vec = output_ary.ravel() # this is your 1d-array

3voto

cval Points 1218

En cas de listes imbriquées arbitraires (juste au cas où) :

def flatten(lst):
    result = []
    for element in lst: 
        if hasattr(element, '__iter__'):
            result.extend(flatten(element))
        else:
            result.append(element)
    return result

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

3voto

SATYAM TRIPATHI Points 29
def flatten_tuple_list(tuples):
    return list(sum(tuples, ()))

tuples = [(5, 6), (6, 7, 8, 9), (3,)]
print(flatten_tuple_list(tuples))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X