Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

écriture pythonesque

12 réponses
Avatar
Olivier Ravard
Bonjour à tous,

Voici un petit problème :

J'ai une liste de la forme :
a = [[(1,11),(2,22),(3,33)], [(4,44),(5,55)], ...]

et je veux obtenir la liste suivante :
[(1,11),(2,22),(3,33),(4,44),(5,55), ...]

Bien sûr, les entiers 1,2,3, ..., 11, 22, 33, ...
sont des nombres choisis ici arbitrairement.
Je souhaite faire cette opération de manière "pythonesque"
et efficace (les listes peuvent être longues...).

Pour faire cette opération :

1. utilisation de "extend"
b = []
[b.extend(r) for r in a]
il me semble que l'utilisation de "extend" est relativement lente.

2. Utilisation de numpy
c = numpy.ravel(a)
b = [(c[i],c[i+1]) for i in range(len(c))[::2]]
Je ne suis pas sûr que cette solution soit plus rapide que la précédente.
De plus la fonction ravel ne fonctionne que si le nombre d'éléments
de chaque liste de niveau 1 soit de même taille. Dans mon exemple, ça ne
fonctionne que si a = [[(1,11),(2,22),(3,33)], [(4,44),(5,55),(6,66)], ...]

Avez-vous d'autres suggestions ?


O.R.

2 réponses

1 2
Avatar
Christophe
Michel Claveau - NoSpam SVP ; merci a écrit :
Bonjour !

J'ai pris l'habitude d'utiliser types car ce module contient des types
génériques très pratiques. Comme, par exemple, types.StringTypes, qui
permet de tester à la fois les chaînes String et Unicode.
Du coup, j'utilise toujours la même notation, ce qui m'évite de me poser
des questions.



Ah, merci pour cette précision. J'ai moi même à l'inverse très fortement
l'habitude d'utiliser les builtins autant que possible alors je ne me
suis jamais posé de questions quand au module types.

Par exemple, le type basestring très pratique pour tester à la fois str
et unicode :)

Sur ce, je vais enquêter sur un très mystérieux types.EllipsisType que
je viens de trouver dans ce module et qui prétend être un builtin
ellipsis mais est introuvable et est impossible à instancier :)
Avatar
Bruno Desthuilliers
Christophe a écrit :
(snip)
Par exemple, le type basestring très pratique pour tester à la fois str
et unicode :)



Officiellement déconseillé (mais à peu près tout le monde le fait).

Sur ce, je vais enquêter sur un très mystérieux types.EllipsisType que
je viens de trouver dans ce module et qui prétend être un builtin
ellipsis mais est introuvable et est impossible à instancier :)



Un point de départ:
http://docs.python.org/reference/datamodel.html#the-standard-type-hierarchy
1 2