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

tableaux

30 réponses
Avatar
JBB
Bonjour, mon problème est très simple:
soit un tableau
t = [ 1,2,8,12,74]
je veux obtenir le tableau suivant:
[ 1,1,2,2,8,8,12,12,74,74]
ou d'un manière plus générale:
soit 2 fonctions f et g:
par exemple:
def f(x):
return & % 255
def g(x):
return (x >> 8) % 255

je veux obtenir:
[f(t[0],g(t[0]),f(t[1],g(t[1]),...]

ou encore mieux avec une fontion
def h(x):
return f(x),g(x)

du coup je fait un truc du genre:
[h(x) for x in t] mais ca me donne un tableau de tupple et je veux un tableau 'à plat'.



Y a sûrement un moyen très simple de faire ça.

10 réponses

1 2 3
Avatar
Bruno Desthuilliers
Bruno Desthuilliers wrote:


C'est nouveau (depuis 2.4 de mémoire)


Heu... Pas vraiment, non. C'était déjà là dans la 1.5.2 (en 1999).



Ok, c'est juste, enfin ça marche pour 2.1 en tout cas, je suis juste passé à
côté à cette époque. J'étais resté sur cette idée puisque la fonction apply
n'est signalée "deprecated" que depuis 2.3 (et non 2.4).

Et je crois que je devrais soit arrêter de poster, soit prendre des

vacances (soit les deux)...

La syntaxe :
def func(*args, **kw): return 42

existe bien depuis (au moins) la 1.5.2. Par contre, la syntaxe
'symétrique' :

result = func(*(1, 2, 3), **{'foo':'bar'})

est effectivement plus récente (version 2.0, octobre 2000).

Ayant découvert Python fin 99, donc entre ces deux releases, j'ai
assimilé le tout à peu près en même temps - j'espère donc qu'on me
pardonnera cette petite inexactitude.

Quant à apply(), on lui a récemment trouvé un recyclage intéressant
comme décorateur pour définir des properties sans polluer l'espace de
nommage:

class Quux(object):
@apply
def foo():
def fget(self):
return self._bar * 42
def fset(self, value):
self._bar = int(value)
return property(**locals())



Avatar
Amaury Forgeot d'Arc
Bruno Desthuilliers wrote:


C'est nouveau (depuis 2.4 de mémoire)


Heu... Pas vraiment, non. C'était déjà là dans la 1.5.2 (en 1999).



Ok, c'est juste, enfin ça marche pour 2.1 en tout cas, je suis juste
passé à
côté à cette époque. J'étais resté sur cette idée puisque la fonction
apply
n'est signalée "deprecated" que depuis 2.3 (et non 2.4).

Et je crois que je devrais soit arrêter de poster, soit prendre des

vacances (soit les deux)...

La syntaxe :
def func(*args, **kw): return 42

existe bien depuis (au moins) la 1.5.2. Par contre, la syntaxe
'symétrique' :

result = func(*(1, 2, 3), **{'foo':'bar'})

est effectivement plus récente (version 2.0, octobre 2000).


En fait, elle existe depuis la 1.6, comme on peut le voir ici:
http://svn.python.org/view/python/tags/r16b1/Grammar/Grammar
Demain, ça fera sept ans !


Ayant découvert Python fin 99, donc entre ces deux releases, j'ai
assimilé le tout à peu près en même temps - j'espère donc qu'on me
pardonnera cette petite inexactitude.

Quant à apply(), on lui a récemment trouvé un recyclage intéressant
comme décorateur pour définir des properties sans polluer l'espace de
nommage:

class Quux(object):
@apply
def foo():
def fget(self):
return self._bar * 42
def fset(self, value):
self._bar = int(value)
return property(**locals())


Intéressant! je note...

--
Amaury Forgeot d'Arc




Avatar
Bruno Desthuilliers


Bruno Desthuilliers wrote:


C'est nouveau (depuis 2.4 de mémoire)



Heu... Pas vraiment, non. C'était déjà là dans la 1.5.2 (en 1999).


Ok, c'est juste, enfin ça marche pour 2.1 en tout cas, je suis juste
passé à
côté à cette époque. J'étais resté sur cette idée puisque la fonction
apply
n'est signalée "deprecated" que depuis 2.3 (et non 2.4).

Et je crois que je devrais soit arrêter de poster, soit prendre des

vacances (soit les deux)...

La syntaxe :
def func(*args, **kw): return 42

existe bien depuis (au moins) la 1.5.2. Par contre, la syntaxe
'symétrique' :

result = func(*(1, 2, 3), **{'foo':'bar'})

est effectivement plus récente (version 2.0, octobre 2000).



En fait, elle existe depuis la 1.6, comme on peut le voir ici:
http://svn.python.org/view/python/tags/r16b1/Grammar/Grammar


Amis archéologues, bonsoir !-)

Dans la pratique, personne à ma connaissance n'a jamais utilisé la 1.6.
Pour la petite histoire:
http://www.amk.ca/python/2.0/index.html#SECTION000300000000000000000


Demain, ça fera sept ans !



Ayant découvert Python fin 99, donc entre ces deux releases, j'ai
assimilé le tout à peu près en même temps - j'espère donc qu'on me
pardonnera cette petite inexactitude.

Quant à apply(), on lui a récemment trouvé un recyclage intéressant
comme décorateur pour définir des properties sans polluer l'espace de
nommage:

class Quux(object):
@apply
def foo():
def fget(self):
return self._bar * 42
def fset(self, value):
self._bar = int(value)
return property(**locals())



Intéressant! je note...

je ne sais plus trop où j'ai récupéré cet idiome, mais j'avoue le

trouver assez clean.





Avatar
Mihamina (R12y) Rakotomandimby
Bruno Desthuilliers - <46097f87$0$29877$ :

#SECTION000300000000000000000


Je sais bien que je peux leur demander, mais avaient-ils une bonne raison de
mettre autant de '0'?

Avatar
Laurent Pointal

Et je crois que je devrais soit arrêter de poster,


Ah, non.

soit prendre des
vacances (soit les deux)...


Là, si tu veux (et si tu peux...)

Avatar
Bruno Desthuilliers

Et je crois que je devrais soit arrêter de poster,


Ah, non.

soit prendre des
vacances (soit les deux)...


Là, si tu veux (et si tu peux...)

Hélas...



Avatar
JBB
Bonsoir !

t = [ 1,2,8,12,74]
[i for i in t for j in [1]*2]
Effectivement ça marche mais j'ai du mal à comprendre !

En tout cas trop fort.

(pour n, remplacer 2 par n)

@+

MCI




Avatar
Michel Claveau
'soir !


j'ai du mal à comprendre


Moi-z'aussi.

En fait j'ai trouvé ça en cherchant (à nettoyer) mon steak, sous une
frite ; le coup est parti, et le bout de code est sorti.





--
@-salutations

Michel Claveau

Avatar
NicolasP
t = [ 1,2,8,12,74]
[i for i in t for j in [1]*2]
Effectivement ça marche mais j'ai du mal à comprendre !

En tout cas trop fort.


Moi non plus, je ne comprends pas bien. Par réflexe, j'aurais plutôt inversé les deux for.
D'ailleurs, en expérimentant un peu, j'arrive à ça :

t=[1, 2, 8, 12, 74]
[[i]*2 for i in t]

Qui dit mieux ?

Nicolas


Avatar
JBB
t = [ 1,2,8,12,74]
[i for i in t for j in [1]*2]
Effectivement ça marche mais j'ai du mal à comprendre !

En tout cas trop fort.


Moi non plus, je ne comprends pas bien. Par réflexe, j'aurais plutôt
inversé les deux for.
D'ailleurs, en expérimentant un peu, j'arrive à ça :

t=[1, 2, 8, 12, 74]
[[i]*2 for i in t]

Qui dit mieux ?

Nicolas
Ca ne donne pas le même résultat.

[[1, 1], [2, 2], [8, 8], [12, 12], [74, 74]]
au lieu de
[1, 1, 2, 2, 8, 8, 12, 12, 74, 74]

j'ai une autre solution ( mais sûrement pas très performante):
eval("[" + str([[i]*2 for i in t]).replace("[","").replace("]","") + "]")



1 2 3