PDA

View Full Version : [python] Lista dinamica


Shirov
03-08-2008, 17:51
Problema:
Ho un file di testo da cui estrarre una serie di dati che sono dati in questo formato preciso:

dato01 dato02 dato03
dato11 dato12 dato13
dato21 dato22 dato33
........
daton1 daton2 daton3

Questi sono da memorizzare in oggetti appositi che vanno inseriti in una lista dinamica la quale deve poter essere ordinata a volte su un tipo di dato a volte su un altro (mettendo che ogni colonna rappresenti un tipo di dato diverso). Inoltre in questa lista sono previsti inserimenti, cancellazioni (in quasivoglia posizione, naturalmente) e successivi riordinamenti.
Detto che si lavora in modalità rigorosamente testuale e senza uso di alcun database (per motivi inutili a spiegarsi) in pratica si lavora in memoria e al termine delle operazioni può anche sparire tutto, la domanda è semplice:
usando Python quali sono le strutture dati migliori (diciamo da un punto di vista prestazionale) per memorizzare ogni singolo elemento e per costruire la lista?

Grazie.

nico159
03-08-2008, 20:31
La lista è la struttura più potente di Python: è una sequenza quindi gli elementi conservano il loro ordine e sono indicizzati, supporta l'indirizzamento e la selezione tramite indici, può crescere e decrescere dinamicamente, può contenere qualsiasi oggetto, supporta l'annidamento a più livelli e così via...praticamente ci fai di tutto :cool:
Per i dati usa semplicemente le stringhe

cdimauro
03-08-2008, 21:29
Concordo: la lista appare lo strumento migliore.

Comunque una struttura dati esattamente uguale a quella riportata sopra non mi convince molto: io non chiamerei così i miei tipi di dato. :p

Vediamo se verrà fornito qualche esempio reale del problema, così da poter modellare delle soluzioni su misura. :cool:

atragon
04-08-2008, 00:08
Forse intendeva dire che a 4 a 3 vanno raggruppati... quindi direi che una lista di sole stringhe non va bene... classi ad hoc?

Shirov
04-08-2008, 00:15
Esatto, i dati vanno raggruppati. Ok, per le liste, me le sto studiando (non sarebbe lavoro mio ma tant'è). Per quel che riguarda i dati ho ovviamente generalizzato. Sono questi:
nome1 - cognome1 - matricola1 (1 è la riga del file di testo che riporta i dati)
nome2 - cognome2 - matricola2
.....
ecc...

devono essere inseriti nella lista ovviamente in modo che ogni elemento della lista raggruppi i dati contenuti in ciascuna riga. E' possibile creare quindi una lista nella quale ogni elemento sia una classe che contenga appunto nome+cognome+matricola e in modo che sia possibile ordinare su ciascuno dei 3 campi, a richiesta?

Grazie e scusate se non sono chiaro ma è dalle 7 di stamattina (ed è domenica :rolleyes: ) che mi sto sbattendo con questa ed altre amenità.

nico159
04-08-2008, 01:38
Forse intendeva dire che a 4 a 3 vanno raggruppati... quindi direi che una lista di sole stringhe non va bene... classi ad hoc?

Credi nel Pitone :cool:
Puoi usare solo liste:

datiMatricola = [ [nome1, cognome1, matricola1],
[nome2, cognome2, matricola2] ]

Oppure puoi usare lista + dizionario

datiMatricola = [ { 'nome' : nome1, 'cognome' : cognome1, 'matricola' : matricola1},
{ 'nome' : nome2, 'cognome' : cognome2, 'matricola' : matricola2} ]

Così da poter fare datiMatricola[0]['nome'] :D

cdimauro
04-08-2008, 08:46
Concordo. Per ordinare la lista in base all'apposito campo c'è poi il metodo sort delle liste che prevede sia specificata (opzionalmente) la chiave da utilizzare per l'ordinamento. ;)

Shirov
04-08-2008, 20:54
Interessante... davvero interessante.... ci provo e se ho problemi mi faccio vivo. Grazie. :)