List comprehension

Sun 10 November 2013

List comprehension er en programmeringskonstruksjon som lar deg gjøre set comprehension på lister. Det vil si lage spesifikke sett fra et mer generisk sett.

Eksempler

Ta alle tall fra 1 - 10 og gang de med 2.

[x*2 | x <- [1..10]]

[2,4,6,8,10,12,14,16,18,20]

Ta alle tall fra 1 - 10 som ganget med 2 er større en 12.

[x*2 | x <- [1..10], x*2 >= 12

[12,14,16,18,20]

Ta alle tall mellom 50 - 100 som mod 7 gir 3

[ x | x <- [50..100], x `mod` 7 == 3]

[52,59,66,73,80,87,94]

Alle tre eksemplene over er hentet fra den anbefalte boken: "Learn you haskell for a great good"

Fordeler med list comrehensions

Det kule med list comprehensions er at vi kan bygge veldig kompliserte sett på en enkel måte. Ved å bruke predikater kan vi erstatte mye logikk / testing som typisk gjøres i if-setninger siden vi begrenser settet til kun de verdiene vi ønsker helt fra starten av. Vi kan konstruere lister på en naturlig måte, litt som vi kjenner det fra mattematikken.

List comprehension i andre språk

List comprehensions er også å finne i mange andre språk, så det er bare å finne sin favoritt: http://en.wikipedia.org/wiki/List_comprehension

Et par eksempler i Python

Vi ønsker å lage en liste med tallene fra 1 - 10.

x = [i for i in range(10)]

Vi ønsker å lage en liste som består av kvadrater, 2^2, 3^3, 4^4 osv. Først gjør vi det på den tradisjonelle måten.

kvadrat = []

for x in range(10):

kvadrat.append(x**2)

Her er hvordan du kan lage den samme kvadratlisten ved å bruke list comprehension.

kvadrat = [x**2 for x in range(10)]

Du kan bruke list comprehensions på alle datatyper og objekter, ikke bare tall.

Python tutorial som handler om list comprehensions: http://www.pythonforbeginners.com/lists/list-comprehensions-in-python/

List comprehensions i python docs: http://docs.python.org/2/tutorial/datastructures.html#list-comprehensions

Det var kort om list comprehension. Sjekk ut hvordan du kan bruke det i ditt programmeringsspråk slik at du kan gjøre koden din litt mer elegant.

Tagged as : haskell python lister sett