수색…


배열 이해

기본 구문

Julia의 배열 내포는 다음 구문을 사용합니다.

[expression for element = iterable]

for 루프 와 마찬가지로 = , in 모두가 이해를 위해 허용됩니다.

이것은 빈 배열을 만들고 for 루프를 사용하여 push! 것과 대략 같습니다 push! 그것에 항목을.

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

그러나 배열 이해의 유형은 가능한 좁아서 성능면에서 더 좋습니다.

예를 들어, 1 에서 10 까지의 정수의 제곱의 배열을 얻으려면 다음 코드를 사용할 수 있습니다.

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

이것은 더 이상를위한 깨끗하고 간결한 대체 for -loop 버전.

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

조건부 배열 이해

Julia 0.5 이전에는 배열 내재 조건을 사용할 수 없었습니다. 그러나 더 이상 사실이 아닙니다. Julia 0.5에서는 다음과 같은 조건을 사용할 수 있습니다.

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

위 예제의 소스는 여기 에서 찾을 수 있습니다 .

중첩 목록 이해를 사용하려면 다음을 수행하십시오.

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)

다차원 배열 내포

중첩 된 for 루프는 여러 고유 한 iterable을 반복하는 데 사용될 수 있습니다.

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

유사하게, 다중 반복 사양은 어레이 내포물에 제공 될 수있다.

[expression for a = iterable_a, b = iterable_b]

예를 들어, 다음은 1:31:2 의 데카르트 곱을 생성하는데 사용될 수있다.

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)

전개 된 다차원 배열 내포는 모양을 잃어 버리는 것을 제외하면 비슷합니다. 예를 들어,

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)

위의 평탄화 된 변형입니다. 구문상의 차이점은 쉼표 대신에 for 가 추가 for 사용된다는 것입니다.

발전기 내역

생성기 내포는 배열 내포와 비슷한 형식을 따르지만 대괄호 [] 대신 괄호 () 사용합니다.

(expression for element = iterable)

이러한 표현식은 Generator 객체를 반환합니다.

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

함수 인수

생성기 내포는 함수에 대한 유일한 인수로 제공 될 수 있으며 추가 괄호 세트가 필요하지 않습니다.

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

그러나 인수가 두 개 이상 제공되면 생성자는 자체 괄호 세트를 요구합니다.

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
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow