[Python] Operazioni tra linee differenti
Marco Beri
marcoberi a gmail.com
Gio 28 Maggio 2009 21:13:02 CEST
2009/5/28 angelseth a libero.it <angelseth a libero.it>
> Ciao a tutti.
> Sono un biologo marino (quindi il mio approccio alla
> programmazione è completamente da autodidatta) e mi sono appena scritto
> alla
> ML. Ho iniziato a usare Python da qualche mese sia per diletto che per
> lavoro.
> Spesso infatti ho bisogno di rendere automatici, precisi e veloci alcuni
> processi di analisi di dati biologici.
Questo programmillo:
#==============================
raw = """ID Date Time Val1 Val2
3522 28/04/2009 07:12:55 0,73 16,58
3664 28/04/2009 07:17:39 1,05 16,48
3665 28/04/2009 07:17:41 1,83 16,50
3666 28/04/2009 07:17:43 3,6 16,50
3667 28/04/2009 07:17:45 4,58 16,56
3668 28/04/2009 07:17:47 4,37 16,58
3669 28/04/2009 07:17:49 2,43 16,60
3690 28/04/2009 07:18:31 1,65 16,58
3691 28/04/2009 07:18:33 1,5 16,58
3712 28/04/2009 07:19:15 1,27 16,56
3713 28/04/2009 07:19:17 1,0 16,58
3714 28/04/2009 07:19:19 0,6 16,58
3772 28/04/2009 07:21:15 1,85 16,48"""
dati = sorted([line.split(" ") for line in raw.split("\n")[1:]])
liste = []
for riga in dati:
if not liste or int(riga[0]) != int(liste[-1][-1][0]) + 1:
liste.append([])
liste[-1].append(riga)
for n, lista in enumerate(liste):
print "Sequenza %d lunghezza %d" % (n, len(lista))
for riga in lista:
print riga[0],
print "\n", "="*10
#==============================
Stampa questo:
Sequenza 0 lunghezza 1
3522
==========
Sequenza 1 lunghezza 6
3664 3665 3666 3667 3668 3669
==========
Sequenza 2 lunghezza 2
3690 3691
==========
Sequenza 3 lunghezza 3
3712 3713 3714
==========
Sequenza 4 lunghezza 1
3772
==========
Il lavoro "sporco" lo fanno tutto queste righe:
liste = []
for riga in dati:
if not liste or int(riga[0]) != int(liste[-1][-1][0]) + 1:
liste.append([])
liste[-1].append(riga)
Ovviamente do per scontato un po' di cose:
- che la prima riga contenga gli header
- che ogni riga abbia un valore intero come primo campo
- che i campi siano separati da un solo spazio
Se non e` cosi` devi cambiare il primo split di questa riga:
dati = sorted([line.split(" ") for line in raw.split("\n")[1:]])
Ciao.
Marco.
--
http://thinkcode.tv - Prossimamente su questi schermi
http://beri.it - Blog di una testina di vitello
http://stacktrace.it - Aperiodico di resistenza informatica
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: http://lists.python.it/pipermail/python/attachments/20090528/abe66280/attachment.htm
Maggiori informazioni sulla lista
Python