El Blog de Trespams

Blog personal sobre tecnologia, gestió de projectes i coses que se me passen pel cap

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

blog comments powered by Disqus