[Python] Codifica di Hamming

Mr.SpOOn mr.spoon21 a gmail.com
Dom 25 Maggio 2008 19:24:38 CEST


Salve,
sto cercando di implementare un algoritmo per applicare la codifica di
Hamming a delle stringhe.

Mettendo da parte i dettagli, quello che devo fare è prendere in input
una stringa e aggiungere degli elementi nelle posizioni il cui indice
è una potenza di due.
La funzione per controllare che un certo indice sia potenza di 2 l'ho
scritta e funziona.

Sto provando in diversi modi a modificare le stringhe opportunamente,
ma ho qualche problema.

Prima ho provato con questo:
ah, le stringhe che devo modificare sono in una lista. Quindi il codice è:

listaParoleNew = ["%s%s%s" % (s[0:i], "H", s[i:]) for s in listaParole
for i in xrange(len(s)) if isPower(i+1,2)]

Ma non fa proprio quello che mi serve, perché la stessa la parola la
inserisce più volte, con un carattere cambiato per volta. Per esempio,
per la stringa "1234" viene fuori:

['H1234', '1H234', '123H4']

Invece a me servirebbe che venisse HH1H234

Qui ho proprio sbagliato io. Se riuscissi a fare quello che mi serve
modificando quel codice, sarebbe il massimo.

Poi ho provato questo:

>>> for j, s in enumerate(listaParole):
...    for i in xrange(len(s)):
...        if isPower(i+1,2):
...           s = "%s%s%s" % (s[0:i], "H", s[i:])
...    listaParole[j] = s

Che però con una stringa lunga 5 caratteri, ad esempio "12345", non
funziona, infatti viene:

'HH1HH2345', mentre quella corretta sarebbe HH1H234H5

L'errore dipende dal fatto che io sto modificando la lista sulla quale itero.
Stavo pensando quindi di copiare la stringa in una lista, tipo l =
list("12345"), capovolgerla e prendere gli elementi dalla lista con
una pop() senza alterare la stringa.

In questo modo inizio a costruire la nuova stringa in maniera
corretta, ma rimane il problema che l'iterazione finisce prima di aver
"poppato" tutti gli elementi.

Qualche suggerimento?
Spero di aver esposto il problema in maniera chiara.

Grazie in anticipo :\


Maggiori informazioni sulla lista Python