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

decoupage trame par bloc de 2

7 réponses
Avatar
JBB
Bonjour à tous

Voilà j'ai une chaîne de taille paire
s = "nimportquoi!"
et je veux obtenir
["ni","mp","or","tq","uo","i!"]
c'est à dire découper par paire de caractères

pour l'instant j'ai:
[s[2*i:2*i+2] for i in range(0,len(s)/2)]
qui marche

Avez vous autre chose? plus propre? plus performant?

7 réponses

Avatar
MC
Bonsoir !

Avez vous autre chose? plus propre? plus performant?


Plus propre, je ne suis pas sûr.Mais, tordu, oui :

print map(''.join,zip(s[::2],s[1::2]))






--
@-salutations

Michel Claveau

Avatar
Bruno Desthuilliers
Bonsoir !

Avez vous autre chose? plus propre? plus performant?



Plus propre, je ne suis pas sûr.Mais, tordu, oui :

print map(''.join,zip(s[::2],s[1::2]))

Bin quoi ? C'est effectivement plus propre, et certainement moins tordu.



Avatar
Eric Brunel
On Thu, 15 Mar 2007 17:32:30 +0100, JBB wrote:

Bonjour à tous

Voilà j'ai une chaîne de taille paire
s = "nimportquoi!"
et je veux obtenir
["ni","mp","or","tq","uo","i!"]
c'est à dire découper par paire de caractères

pour l'instant j'ai:
[s[2*i:2*i+2] for i in range(0,len(s)/2)]
qui marche

Avez vous autre chose? plus propre? plus performant?


Disons au moins autre chose, peut-être un petit poil plus lisible quand on
sait comment utiliser le troisième paramètre de range:

[s[i:i+2] for i in range(0, len(s), 2)]

Mais ça évite juste les /2 et *2...

HTH quand même.
--
python -c "print ''.join([chr(154 - ord(c)) for c in
'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])"

Avatar
JBB
Bonsoir !

Avez vous autre chose? plus propre? plus performant?



Plus propre, je ne suis pas sûr.Mais, tordu, oui :

print map(''.join,zip(s[::2],s[1::2]))

Bin quoi ? C'est effectivement plus propre, et certainement moins tordu.



Sympa je découvre de nouvelles fonctions..

voilà une nouvelle version:

map(str.__add__,s[::2],s[1::2])

qui me parait de plus en plus propre.



Avatar
Bruno Desthuilliers
Bonsoir !

Avez vous autre chose? plus propre? plus performant?



Plus propre, je ne suis pas sûr.Mais, tordu, oui :

print map(''.join,zip(s[::2],s[1::2]))

Bin quoi ? C'est effectivement plus propre, et certainement moins tordu.



Sympa je découvre de nouvelles fonctions..

voilà une nouvelle version:

map(str.__add__,s[::2],s[1::2])

qui me parait de plus en plus propre.


Mmm...
<mode="puriste">
__add__ est une méthode d'implémentation, et donc ne devrait pas être
utlisée directement. La solution politiquement correct serait d'utiliser
le module operator:

from operator import add
map(add,s[::2],s[1::2])

</mode>

Mais bon, c'est histoire de dire, hein...




Avatar
Méta-MCI
Salut !


On peut aussi remplacer __add__ par une (fonction) lamba :

print map(lambda(x,y): x+y,zip(s[::2],s[1::2]))


@+

MCI
Avatar
Méta-MCI
Chalut !


[s[i:i+2] for i in range(0, len(s), 2)]




C'est marrant, car j'avais pensé à un truc très proche :
map(lambda(i):s[i:i+2], range(0,len(s),2))


@-salutations

MCI