Örvitinn

Slice tekur þrjá parametra

Allir sem hafa forritað í Python þekkja hvernig hægt er að klippa lista.

[1,2,3,4][1:] skilar [2,3,4]
[1,2,3,4][:-1]->[1,2,3]
[1,2,3,4][1:-1]->[2,3]

Það sem ég vissi ekki fyrr en rétt í þessu, vegna þess að ég asnaðist til að lesa python skjölunina útaf allt öðru falli, er að slice tekur þriðja parameterinn step. Þannig að:

[1,2,3,4,5,6][::2] skilar [1, 3, 5]
[1,2,3,4,5,6][1::2]->[2, 4, 6]
[1,2,3,4,5,6][1:-1:2]->[2, 4]

Mínus tölur snúa lista:
[1,2,3][::-1] skilar [3, 2, 1]
[1,2,3,4,5,6][::-2]->[6, 4, 2]

Þetta finnst mér gott dæmi um það hvað ég er stundum seinn að fatta. Ég veit ekki hvort ég hefði þurft að nota þetta oft en það er gaman að vita af þessu.

Svo hef ég líka afskaplega gaman að því að skrifa bloggfærslur sem fara fyrir ofan garð og neðan hjá flestum sem slysast hingað inn.

python
Athugasemdir

teitur - 01/04/09 16:30 #

Þetta var nú aldeilis fróðlegt og gott að vita.

Matti - 02/04/09 08:28 #

Þetta er örugglega það gáfulegasta sem ég hef skrifað á þetta blogg í langan tíma.

Erlendur - 03/04/09 01:16 #

Þetta er reyndar fídus sem ég hef notað þónokkuð í Python og Matlab. En það er alltaf gaman að komast að svona smáhlutum.

Matti - 03/04/09 16:00 #

sem ég hef notað þónokkuð í Python og Matlab

Enda kemur þessi fítus í Python gegnum Numpy liðið sem væntanlega hefur notað hann í Matlab.

Eggert - 03/04/09 16:39 #

Numpy er einmitt með fleiri slice tilbrigði, eins og að geta notað ... sem slice, og n-staka index, þar sem hvert stak getur verið slice:

>>> a = numpy.arange(100)
>>> a.shape = 2,5,10
>>> a[1,...,::-4]
array([[59, 55, 51],
       [69, 65, 61],
       [79, 75, 71],
       [89, 85, 81],
       [99, 95, 91]])