Kévin Gomez
Premium
2

Kévin Gomez

Male, 17 years old,

Clermont-ferrand

,

France

 

Un Run-length encoding en Python

Le Run-length encoding, que j’abrégerai RLE, est grosso-modo un algorithme de compression de données créé à la base pour réduire la taille des images. Il consiste à indiquer pour chaque même élément le nombre de répétitions consécutives de ce dernier.
Une chaine de caractères comme celle-ci : WWWWWBWWWWWWBBBWWWWWWWWWBWWWWWWWW33′, sera donc après passage dans une fonction de compression RLE comme ceci : 5W1B6W3B9W1B8W23.

Ayant vu quelques personnes sur IRC s’amuser à implémenter leurs versions de cet algorithme dans différents langages, je me suis dit qu’il serait peut-être sympa de m’y essayer moi aussi ^^
Et voilà mon résultat :

#!/usr/bin/env python
#-*- encoding: utf-8 -*-
 
from itertools import groupby
 
to_rle_convert = 'WWWWWBWWWWWWBBBWWWWWWWWWBWWWWWWWW33'
 
def rle(string):
    return (''.join([str(len(list(group)))+name
               for name, group in groupby(string)]))
 
rle_converted =  rle(to_rle_convert)
print rle_converted
 
def rle_decoder(string):
    return ''.join([int(elem)*string[id+1]
              for id, elem in enumerate(string) if id%2 == 0])
 
print rle_decoder(rle_converted)

Si je mets mon code à disposition ici et dans mon portfolio, c’est bien entendu parce que j’attends de vous que vous me donniez vos remarques/suggestions/conseils avisés