Slicing en Python


Escrit per Paurullan a 17 de July , 2011 a les 1:04 p.m.

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


Traducciones/Translations by apertium

0 comentaris, 0 trackbacks (URL) , Tags: Python