ADT
List Comprehensions
Ni kan läsa mer om List Comprehension och generatorer i kursboken Learning Python, kapitel 14 & 20.
List comprehension definierar en lista med hjälp av operationer på en genererad lista. Syntaxen för list comprehension påminner om hur listor definieras genom uppräkning, men är mer generell.
Testa följande:
>>> [number for number in range(10)]
>>> sum([number for number in range(513)])
>>> ['*' * (star * 2 + 1) for star in range(4)]
Ni kan även använda er av villkorssatser inne i en list comprehension för att på så vis filtrera ut de värden som är relevanta för ert resultat.
Testa:
>>> def is_prime(n):
... for m in range(2, n):
... if n % m == 0: return False
... return True
...
>>> sum([number for number in range(1000) if is_prime(number)])
Listan baseras på uttrycket innan for, variabeln direkt efter for antar successivt alla värden i den sekvens ni anger. Uttrycket till vänster om for kan vara vilket uttryck som helst, även om det bör returnera ett värde. Vill ni bara ta med delar av den sekvens som angivits baserat på ett villkor kan ni placera en if-sats i slutet av list comprehension.
Filter
Funktionen filter filtrerar en lista med värden beroende på resultatet av en funktion. Villkorssatsen i en list comprehension är i stort sett en implementation av funktionen filter, även om syntaxen är något annorlunda.
Prova följande:
>>> def is_prime(n):
... for m in range(2, n):
... if n % m == 0: return False
... return True
...
>>> sum(filter(is_prime, range(1000)))
filter kan även ses som en sökning, funktionen i det första argumentet är sökvillkoret, listan i det andra argumentet är databasen ni vill söka i och resultatet är alla element i databasen som matchade sökvillkoret.
Map
Ett ofta förekommande inslag i programmering är att utföra samma operation på varje element i en lista. Detta brukar kallas för map inom funktionell programmering. Funktionen map finns i Python och tar (minst) två argument. Resultatet är en lista med returvärden från funktionen då funktionen anropasen gång för varje element i listan.
Prova följande:
>>> def is_prime(n):
... for m in range(2, n):
... if n % m == 0: return False
... return True
>>> list(map(is_prime, range(10)))
Lambda
Ni kan läsa mer om lambda och varför ni bör använda det i kursboken Learning Python, kapitel 19.
lambda-funktioner är små, simpla och namnlösa funktioner som definieras medan programmet eller applikationen körs. Kroppen i en lambda-funktion kan bara innehålla ett uttryck (en kodrad).
Prova följande:
>>> sqrt = lambda x: x ** 0.5
>>> sqrt(2)
>>> pow = lambda x, y = 2: x ** y
>>> pow(2)
>>> pow(2, 10)
Python
Emacs
Laborationer och material
Sidansvarig: Pontus Haglund
Senast uppdaterad: 2024-08-14