Julia Language
comprehensies
Zoeken…
Begrip van de matrix
Basissyntaxis
Julia's matrixbegrippen gebruiken de volgende syntaxis:
[expression for element = iterable]
Merk op dat net als bij for
loops alle =
, in
en ∈
worden geaccepteerd voor het begrip.
Dit komt ongeveer overeen met het creëren van een lege array en het gebruik van een for
lus om te push!
items erop.
result = []
for element in iterable
push!(result, expression)
end
het type matrixbegrip is echter zo smal mogelijk, wat beter is voor de prestaties.
Om bijvoorbeeld een reeks van de vierkanten van de gehele getallen van 1
tot 10
, kan de volgende code worden gebruikt.
squares = [x^2 for x=1:10]
Dit is een schone, beknopte vervanging voor de langere versie for
-loop.
squares = []
for x in 1:10
push!(squares, x^2)
end
Voorwaardelijk matrixbegrip
Vóór de Julia 0.5 is er geen manier om voorwaarden te gebruiken in de matrixbegrippen. Maar het is niet langer waar. In Julia 0.5 kunnen we de voorwaarden binnen omstandigheden zoals de volgende gebruiken:
julia> [x^2 for x in 0:9 if x > 5]
4-element Array{Int64,1}:
36
49
64
81
Bron van het bovenstaande voorbeeld kan worden gevonden hier .
Als we geneste lijstbegrip willen gebruiken:
julia>[(x,y) for x=1:5 , y=3:6 if y>4 && x>3 ]
4-element Array{Tuple{Int64,Int64},1}:
(4,5)
(5,5)
(4,6)
(5,6)
Multidimensionale matrixbegrippen
Genest for
lussen kunnen worden gebruikt om een aantal unieke iterabelen te herhalen.
result = []
for a = iterable_a
for b = iterable_b
push!(result, expression)
end
end
Evenzo kunnen meerdere iteratiespecificaties worden geleverd aan een matrixbegrip.
[expression for a = iterable_a, b = iterable_b]
Het volgende kan bijvoorbeeld worden gebruikt om het Cartesiaanse product van 1:3
en 1:2
te genereren.
julia> [(x, y) for x = 1:3, y = 1:2]
3×2 Array{Tuple{Int64,Int64},2}:
(1,1) (1,2)
(2,1) (2,2)
(3,1) (3,2)
Afgevlakte multidimensionale matrixbegrippen zijn vergelijkbaar, behalve dat ze de vorm verliezen. Bijvoorbeeld,
julia> [(x, y) for x = 1:3 for y = 1:2]
6-element Array{Tuple{Int64,Int64},1}:
(1, 1)
(1, 2)
(2, 1)
(2, 2)
(3, 1)
(3, 2)
is een afgeplatte variant van het bovenstaande. Het syntactische verschil is dat een extra for
wordt gebruikt in plaats van een komma.
Generator begrip
Generator-begrippen volgen een vergelijkbare indeling als matrixbegrippen, maar gebruiken haakjes ()
plaats van vierkante haken []
.
(expression for element = iterable)
Een dergelijke uitdrukking retourneert een Generator
object.
julia> (x^2 for x = 1:5)
Base.Generator{UnitRange{Int64},##1#2}(#1,1:5)
Functieargumenten
Generatorbegrippen kunnen worden verstrekt als het enige argument voor een functie, zonder de noodzaak van een extra set haakjes.
julia> join(x^2 for x = 1:5)
"1491625"
Als er echter meer dan één argument wordt gegeven, vergt het begrip van de generator zijn eigen set haakjes.
julia> join(x^2 for x = 1:5, ", ")
ERROR: syntax: invalid iteration specification
julia> join((x^2 for x = 1:5), ", ")
"1, 4, 9, 16, 25"