decoupage trame par bloc de 2

Le
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?
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MC
Le #589453
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

Bruno Desthuilliers
Le #589449
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.



Eric Brunel
Le #590478
On Thu, 15 Mar 2007 17:32:30 +0100, 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?


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+-'])"

JBB
Le #590477
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.



Bruno Desthuilliers
Le #590476
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...




Méta-MCI
Le #590475
Salut !


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

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


@+

MCI
Méta-MCI
Le #590235
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



Publicité
Poster une réponse
Anonyme