Suche…


Array-Verständnis

Grundlegende Syntax

Julias Array-Verständnis verwendet die folgende Syntax:

[expression for element = iterable]

Beachten Sie, dass wie bei for Schleifen alle = , in und für das Verständnis akzeptiert werden.

Dies entspricht in etwa der Erstellung eines leeren Arrays und der Verwendung einer for Schleife zum push! Artikel dazu.

result = []
for element in iterable
    push!(result, expression)
end

Die Art eines Array-Verständnisses ist jedoch so eng wie möglich, was für die Leistung besser ist.

Um beispielsweise ein Feld der Quadrate der Ganzzahlen von 1 bis 10 , kann der folgende Code verwendet werden.

squares = [x^2 for x=1:10]

Dies ist ein sauberer, prägnanter Ersatz für die längere Version for -loop.

squares = []
for x in 1:10
    push!(squares, x^2)
end

Bedingtes Array-Verständnis

Vor dem Julia 0.5 gibt es keine Möglichkeit, Bedingungen innerhalb der Array-Verhältnisse zu verwenden. Aber es stimmt nicht mehr. In Julia 0.5 können wir die Bedingungen innerhalb der folgenden Bedingungen verwenden:

julia> [x^2 for x in 0:9 if x > 5] 
4-element Array{Int64,1}:
 36
 49
 64
 81

Quelle des obigen Beispiels finden Sie hier .

Wenn wir ein verschachteltes Listenverständnis verwenden möchten:

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)

Mehrdimensionale Arrayverstehen

Verschachtelte for Schleifen können verwendet werden, um mehrere eindeutige iterierbare Elemente zu durchlaufen.

result = []
for a = iterable_a
    for b = iterable_b
        push!(result, expression)
    end
end

In ähnlicher Weise können mehrere Iterationsspezifikationen zu einem Arrayverständnis geliefert werden.

[expression for a = iterable_a, b = iterable_b]

Beispielsweise kann das Folgende verwendet werden, um das kartesische Produkt von 1:3 und 1:2 zu erzeugen.

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)

Abgeflachte mehrdimensionale Array-Verhältnisse sind ähnlich, außer dass sie die Form verlieren. Zum Beispiel,

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)

ist eine abgeflachte Variante. Der syntaktische Unterschied besteht darin, dass anstelle eines Kommas ein zusätzliches for verwendet wird.

Generatorverständnisse

Generatorenverstehen haben ein ähnliches Format wie Arrayverstehen, verwenden jedoch Klammern () anstelle von eckigen Klammern [] .

(expression for element = iterable)

Ein solcher Ausdruck gibt ein Generator Objekt zurück.

julia> (x^2 for x = 1:5)
Base.Generator{UnitRange{Int64},##1#2}(#1,1:5)

Funktionsargumente

Generatorenverständnisse können als einziges Argument für eine Funktion bereitgestellt werden, ohne dass zusätzliche Klammern erforderlich sind.

julia> join(x^2 for x = 1:5)
"1491625"

Wenn jedoch mehr als ein Argument angegeben wird, benötigt das Generatorverständnis seinen eigenen Satz von Klammern.

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"


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow