[Python] permettere l'accesso ad una lista di oggetti in diversi modi

Andrea D'Amore and.damore a gmail.com
Dom 4 Dic 2016 08:55:31 CET


2016-12-03 23:01 GMT+01:00 Davide Olianas <davide a davideolianas.com>:
> mi trovo a dover lavorare con dei file .xyz che sono dei file di testo del
> genere
>
> C         -3.95384       -0.70179        0.00000
> C         -3.93661       -2.09651        0.00000
[…]
> ovvero ogni riga contiene un atomo con informazione sull’elemento atomico e
> le coordinate.

> Il problema su cui chiedo consigli è che
> contemporaneamente mi serve poter selezionare un atomo in base ad un indice
> “locale”, ovvero un indice che appartiene all’elemento chimico. In questo
> caso, dovrei poter iterare sul carbonio 6 volte (indice da 0 a 5) e
> sull’idrogeno pure.

> Per esempio, vorrei poter fare qualcosa tipo atoms.byElementIndex('H', 0)
> per selezionare il primo idrogeno.
[…]

Se non ho capito male ti conviene usare pandas, puoi usare un
DataFrame usando una selezione booleana [1] tipo

    h_atoms = data[data['atom'] == 'H']

e
    h_atoms[:, 0]

per avere la prima riga tra gli atomi di idrogeno.
Ci sono due indici nell'ultimo subscript perché il risultato della
selezione booleana è di nuovo un DataFrame, che è bidimensionale.
Pandas ha una curva di apprendimento che non è immediata, almeno non
lo è stato per me, ti conviene leggere l'introduzione "10 minutes to
pandas" e poi la parte specifica sulle strutture dati che ho indicato.


[1]: http://pandas.pydata.org/pandas-docs/stable/dsintro.html#indexing-selection

-- 
Andrea


Maggiori informazioni sulla lista Python