[PIPython] gestire colonne di dati
Alex Martelli
aleaxit
Ven 19 Nov 2004 15:16:43 CET
On Thursday 11 March 2004 04:24 pm, Federico Nati wrote:
> ciao,
>
> elegante. solo che io avevo fatto la versione piu' rozza con il ciclo
> nella quale avevo facilmente implementato un controllo sul primo
> carattere della linea: se corrisponde a "#" o a ";" la faccio saltare
> (in sostanza si tratterebbe di un commento. Qui invece non saprei come
> fare.
Cambia il codice originale:
> > matrice=[map(int, line.split()[:2]) for line in
> > file('tuofile').readlines()]
aggiungendo una condizione acche` una riga venga considerata (suggerirei
anche per semplicita` di usare un'altra list comprehension invece di map!):
matrice=[[int(x) for x in line.split()[:2]]
for line in file('tuofile').readlines()
if line[0] not in '#;\n'
]
ho skippato anche le linee vuote -- in un file in cui si ammettono
commenti mi parrebbe assurdo non ammettere anche righe vuote!
> Inoltre l'ideale sarebbe che per file con una singola colonna venisse
> restituita una lista di numeri, e non una lista di liste con un singolo
> numero.
A questo scopo (indifferentemente che tu usi per il lavoro base una LC
o un ciclo) occorre ovviamente del codice in piu` (che trasformi le liste
con un solo elemento nell'elemento stesso). Io lo metterei in una
funzioncina per chiarezza:
def ifsing(L):
if len(L) == 1: return L[0]
else: return L
forse_matrice_forse_vettore = [ ifsing([int(x) for x in line.split()[:2]])
for line in file('tuofile').readlines()
if line[0] not in '#;\n'
]
naturalmente ho cambiato il nome della variabile in quanto diviene
cosi` totalmente misterioso se si tratti veramente di una matrice
oppure invece di un vettore (auguri relativamente alla facilita` di
manipolarla decentemente in tutto il seguito del programma, comunque
ognuno si sceglie gli ideali suoi...!-).
Alex
More information about the Python
mailing list