Slicing en Python
Slicing en Python
O com l[::-1]
gira una llista.
Resum
En Toni va comentar al darrer creantbits
que es pot girar un string fent cadena[::-1]
. Vos puc adelantar que no sols és la forma més clara pythonica d'escriurer-ho sinó que aquesta és la més ràpida. En aquest petit apunt exposarem els usos i perquè dels slices.
Què són els slices
Un slicing és el procés de seleccionar un rang d'elements d'un objecte de tipus seqüència. Aquest subconjunt pot ser creat de vàries maneres però la gràcia és que un cop generat es converteix en un objecte més i podem manipular-lo de manera tradicional. Cal recordar que els iteradors en python s'indexen des de zero i que podem usar un signe negatiu per començar a contar des del darrera. També és important fixar-se que els límits inferiors són tancats i els superiors oberts.
La sintaxi és:
iterable[inici:final:passa]
#la gramàtica
#iterable[0] el primer element
#iterable[-1] el darrer element
#iterable[-3:] els darrers tres elements
#iterable[:-3] fins als darrers tres
#iterable[::2] de dos en dos
#iterable[::-4] # de quatre en quatre des del darrera
Exemples
D'aquesta manera podem mostrar que:
# range per defecte fa de 0 fins al l'entorn obert
# In [1]:
# l = range(10)
# In [2]: l
# Out[2]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# Des del tercer fins al quart no inclòs (sols el tercer)
# In [3]: l[2:3]
# Out[3]: [2]
# Des del tercer fins al cinquè
# In [4]: l[2:5]
# Out[4]: [2, 3, 4]
# Des del segon fins a l'antepenúltim
# In [5]: l[1:-2]
# Out[5]: [1, 2, 3, 4, 5, 6, 7]
# De dos en dos
# In [6]: l[::2]
# Out[6]: [0, 2, 4, 6, 8]
# Des dos en dos començant pel darrera
# In [7]: l[::-2]
# Out[7]: [9, 7, 5, 3, 1]
# Des del segon fins a l'octau de tres en tres
# In [8]: l[1:7:3]
# Out[8]: [1, 4]
I no cal olvidar que les cadenes de text són al cap i a la fi llistes de caràcters, per la qual cosa podem fer:
#In [1]: s = "Cadena de text"
#Inverteix la cadena
#In [2]: s[::-1]
#Out[2]: 'txet ed anedaC'
Conclusions
Hem vist que els slices són una ràpida i còmode manera de manipular objectes iterables, podent fer operacions comunes com invertir llistes o extreure elements pegant bots de tres en tres de manera molt simple. A més de ser la forma més pythonica és especialment lleugera i cal tenir-los en compte pel dia a dia.
Referències
http://docs.python.org/whatsnew/2.3.html#extended-slices
http://docs.python.org/reference/expressions.html#slicings
http://stackoverflow.com/questions/509211/good-primer-for-python-slice-notation