Julia Language
Zrozumienie
Szukaj…
Zrozumienie tablic
Podstawowa składnia
W wyrażeniach tablicowych Julii zastosowano następującą składnię:
[expression for element = iterable]
Zauważ, że podobnie jak w for
pętli , wszystkie =
, in
i ∈
są akceptowane do zrozumienia.
Jest to w przybliżeniu równoważne utworzeniu pustej tablicy i użyciu pętli for
do push!
przedmioty do tego.
result = []
for element in iterable
push!(result, expression)
end
jednak sposób rozumienia tablic jest możliwie wąski, co jest lepsze dla wydajności.
Na przykład, aby uzyskać tablicę kwadratów liczb całkowitych od 1
do 10
, można użyć następującego kodu.
squares = [x^2 for x=1:10]
Jest to czysty, zwięzły zamiennik dłuższej wersji for
pętli.
squares = []
for x in 1:10
push!(squares, x^2)
end
Zrozumienie tablicy warunkowej
W wersjach wcześniejszych niż Julia 0.5 nie ma możliwości użycia warunków wewnątrz wyrażeń tablicowych. Ale to już nie jest prawda. W Julii 0.5 możemy zastosować warunki wewnątrz warunków, takie jak:
julia> [x^2 for x in 0:9 if x > 5]
4-element Array{Int64,1}:
36
49
64
81
Źródło powyższego przykładu można znaleźć tutaj .
Jeśli chcielibyśmy skorzystać ze zrozumienia listy zagnieżdżonej:
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)
Wielowymiarowe pojęcia tablicowe
Zagnieżdżone for
pętli mogą być używane do iteracji wielu unikalnych iteracji.
result = []
for a = iterable_a
for b = iterable_b
push!(result, expression)
end
end
Podobnie, wiele specyfikacji iteracji może być dostarczonych do zrozumienia tablicy.
[expression for a = iterable_a, b = iterable_b]
Na przykład, do wygenerowania iloczynu kartezjańskiego 1:3
i 1:2
można użyć następujących elementów.
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)
Spłaszczone tablice wielowymiarowe są podobne, z tym wyjątkiem, że tracą kształt. Na przykład,
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)
jest spłaszczonym wariantem powyższego. Różnica składniowa polega na tym, że zamiast przecinka stosuje się dodatkowy for
.
Zrozumienie generatora
Wyrażenia generatora mają podobny format jak wyrażenia tablicowe, ale używają nawiasów ()
zamiast nawiasów kwadratowych []
.
(expression for element = iterable)
Takie wyrażenie zwraca obiekt Generator
.
julia> (x^2 for x = 1:5)
Base.Generator{UnitRange{Int64},##1#2}(#1,1:5)
Argumenty funkcji
Wyjaśnienia generatora mogą być dostarczone jako jedyny argument funkcji, bez potrzeby stosowania dodatkowego zestawu nawiasów.
julia> join(x^2 for x = 1:5)
"1491625"
Jeśli jednak podano więcej niż jeden argument, zrozumienie generatora wymaga własnego zestawu nawiasów.
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"