angels...@libero.it ha scritto: > 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.
Ciao e ben venuto. > Spesso infatti ho bisogno di rendere automatici, precisi e veloci alcuni > processi di analisi di dati biologici. > Ultimamente mi sono scontrato con un > problema che da solo o con l'ausilio dei manuali di cui dispongo, non riesco > a > risolvere. In un file di testo contenente dati come quelli sotto riportati, > devo raggruppare tutti i record che presentano un ID consecutivo (es. da 3664 > a > 3669). > Per riuscirci vorrei creare tante liste diverse quante sono questi > raggruppamenti e porre come condizione per appartenere a una stessa lista che > la differenza tra il valore ID di una linea e quello della precedente sia > uguale a 1. Qui sorge il problema. Non riesco a esprimere in linguaggio di > Python questa condizione. Infatti, in tutti gli script che ho creato finora > ho > sempre avuto a che fare con operazioni che coinvolgevano termini nella stessa > linea. > Allora, supponendo che come struttura dati tu scelga una lista di tuple, come: >>> from datetime import datetime, time >>> [ (3522, datetime(2009, 04, 28), time(7, 12, 55), 0.73, 16.58), (3664, ...) ] Ossia ti crei una struttura dati usango oggetti Python per rappresentare i vari dati. Per raggruppare i dati, puoi usare un metodo abbastanza semplice. # Il file da leggere f = file('/path/to/file') # Una lista di liste contenente tutti i dati raggruppati data = [] # Una lista usata come accumulatore per ciascun gruppo di dati buf = [] # Legge il file riga per riga for line in f: # Fa il parsing della riga, convertendo i dati in oggetti Python # fields è una tupla, il cui primo elemento è l'ID # TODO fields = tuple(line.split()) # Controlla se inserire i dati in un nuovo gruppo o nel gruppo # corrente if not buf or (fields[0] - buf[0] == 1): # La lista è vuota, oppure i dati appartengono allo stesso # gruppo buf.append(fields) # else: # Crea un nuovo gruppo, inserendo quello precedente nella lista # di tutti i gruppi data.append(buf) buf = [fields] Il tutto rigorosamente non testato. Manlio _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python