En rask og kompakt måte å opprette lister på.
comprehend
to understand, take into the mind, grasp by understanding; to take in, include
Navnet kommer fra mengdelære, set comprehension, se Wikidedia: Set-builder notation
På norsk brukes begrepet mengdebygger. se Store Norske Leksikon, mengdelære
Eksempel på mengdebygger:
$S = \{i | i < 10, i \in \mathbb{N} \}$
Det vil si, mengden S består av alle elementer i som er slik at i er mindre enn 10 og i er medlem av mengden av naturlige tall, N. Dermed, med full utlisting:
$S = \{1, 2, 3, 4, 5, 6, 7, 8, 9\}$
I Python skriver vi for det samme med list comprehension:
S = [i for i in range(1,10)]
print(S):
[1, 2, 3, 4, 5, 6, 7, 8, 9]
for i Python-uttrykket kan sammenlignes med den loddrette streken i mengdebygger-notasjonen; det som er foran streken er de elementene vi ønsker å inkludere i lista. Det som kommer etter streken forteller hvilke verdier i kan komme fra. Foran for kan vi også ha uttrykk som må beregnes for å komme fram til en verdi.
Samme eksempel som ovenfor, men med kvadrerte verdier:
S = [i*i for i in range(1,10)]
print(S):
[1, 4, 9, 16, 25, 36, 49, 64, 81]
Se mer om list comprehension hos W3Schools, List comprehesnion
# med betingelsen at i kvadrert skal være mindre enn 50
x = [i*i for i in range(1,10) if i*i < 50]
print(x)
# i-verdien fra range-uttrykket brukes til å beregne et tillegg til en fast startverdi (-5): -5 + i*0.5
x = [-5 + i*0.5 for i in range(21) ]
print(x[0:5])
# eksisterende liste x brukes som input til sinus-funksjon
import math
y = [math.sin(i) for i in x]
print(y[0:5])
# plott av x mot y
import matplotlib.pyplot as plt
plt.plot(x,y)
plt.title('sin(x)')
plt.grid()
plt.show()
$S = \{\frac{\sum D[i:i + k]}{k} | i \in range(len(D) - k) \}$
der
$ D = liste \space med \space data $
$ k = antall \space elementer \space som \space brukes \space i \space glidende \space gjennomsnitt-beregningen$
D = [33.881, 35.794, 29.904, 34.811, 34.768, 34.848, 27.020, 30.826, 32.820, 33.848, 35.799, 34.837, 33.853, 28.780]
k = 3
A = [sum(D[i:i + k])/k for i in range(len(D) - k)]
for i in A:
print(f"{i:.4f}")