Slicing

Python permette di accedere alle strutture dati sia a livello di singolo elemento

x1=lista1[p1]           # accesso in lettura all'elemento alla posizione ...

lista2[p2]=x2           # accesso in scrittura all'elemento alla posizione ...

lista1[p1]=lista2[p2]

che a livello di sequenze, fette di elementi

L1=lista1[p1:q1:r1]                 # accesso in lettura a una certa fetta

lista2[p2:q2:r2]=L2                 # accesso in scrittura a una certa fetta

lista1[p1:q1:r1]=lista2[p2:q2:r2]   # ERRORI MOLTO PROBABILI...

La sintassi, all’interno delle parentesi quadre, è piuttosto complessa

  1. Possono comparire 0/1/2 segni ‘:
  2. Possono comparire 0/1/2 indici numerici
  3. Gli indici hanno la stessa funzione degli argomenti START, STOP, STEP della funzione range()
  4. Se un indice manca allora ha un valore prefissato
    • START = 0
    • STOP = len(lista)
    • STEP = +1

Senza indici

L=lista[:]
L=lista[::]
Dall’inizio fino alla fine, una copia di tutta la lista

Con un solo indice

La presenza, o mancanza dei due punti, cambia il significato dell’indice

x=lista[p]L’elemento alla posizione p
L=lista[START : ]Un numero e i due punti.
A partire dalla posizione START fino alla fine
L=lista[ : STOP]I due punti e un numero.
Dall’inizio fino alla posizione STOP esclusa (fino all’indice STOP-1)
L=lista[ : : STEP]I due punti doppi e un numero…
Dall’inizio fino alla fine con passo STEP

Con due indici

L=lista[START : STOP]A partire da START fino a STOP escluso (fino a STOP-1)
L=lista[START : : STEP]A partire da START fino alla fine, con passo STEP
L=lista[ : STOP : STEP]A partire dall’inizio fino a STOP escluso, con passo STEP

Con tre indici

L=lista[START : STOP : STEP]A partire da START fino a STOP escluso, con passo STEP

Con indici di posizione negativi

Un indice negativo specifica la posizione contando a partire da destra e verso sinistra.
Lo scorrimento rimane da sinistra verso destra.

x=lista[-p]L’elemento alla posizione -p (contando dalla fine)
L=lista[-START : ]A partire dalla posizione –START fino alla fine
L=lista[ : -STOP]Dall’inizio fino alla posizione –STOP esclusa
L=lista[-START : -STOP]A partire da –START fino a –STOP escluso

Con passo negativo

Il passo negativo indica che lo scorrimento avviene da destra verso sinistra.

I valori predefiniti diventano

  • START = len(lista)
  • STOP = -1

Quindi START > STOP

L=lista[ : : -1]Dall’ultimo al primo, una copia della lista rovesciata
L=lista[ : : -STEP]Dall’ultimo al primo, con passo –STEP
L=lista[START : : -STEP]Dalla posizione START al primo, con passo –STEP
L=lista[-START : : -STEP]Dalla posizione –START al primo, con passo –STEP
L=lista[ : STOP : -STEP]Dall’ultimo fino alla posizione STOP esclusa, con passo –STEP
L=lista[ : -STOP : -STEP]Dall’ultimo fino alla posizione –STOP esclusa, con passo –STEP
L=lista[START : STOP : -STEP]A partire da START fino a STOP escluso, con passo –STEP
L=lista[-START : STOP : -STEP]A partire da –START fino a STOP escluso, con passo –STEP
L=lista[START : -STOP : -STEP]A partire da START fino a –STOP escluso, con passo –STEP
L=lista[-START : -STOP : -STEP]A partire da –START fino a –STOP escluso, con passo –STEP