Во-первых, если вы знаете, что в промежуточных списках всегда есть 3 элемента, вам, вероятно, будет лучше использовать Tuple
types для них. И кортежи могут независимо указывать типы своих элементов. Таким образом, что-то вроде этого может соответствовать вашим целям:
julia> l = [(Int64[], Int64[], Float64[]) for _ in 1:10]
10-element Array{Tuple{Array{Int64,1},Array{Int64,1},Array{Float64,1}},1}:
([], [], [])
([], [], [])
([], [], [])
([], [], [])
([], [], [])
([], [], [])
([], [], [])
([], [], [])
([], [], [])
([], [], [])
julia> push!(l[1][3], 5)
1-element Array{Float64,1}:
5.0
julia> l
10-element Array{Tuple{Array{Int64,1},Array{Int64,1},Array{Float64,1}},1}:
([], [], [5.0])
([], [], [])
([], [], [])
([], [], [])
([], [], [])
([], [], [])
([], [], [])
([], [], [])
([], [], [])
([], [], [])
Несколько замечаний, которые могут вас заинтересовать:
Пустые, но типизированные списки могут быть построенным с использованием T[]
, где T
- это тип элемента.
collect(f(i) for i in 1:n)
по существу эквивалентно простому пониманию (как вы привыкли в python) : [f(i) for i in 1:n]
. Обратите внимание, что поскольку переменная i
здесь не играет никакой роли, вы можете заменить ее заполнителем _
, чтобы читателю сразу стало понятно, что вы по сути создаете коллекцию похожих объектов (но не идентичных, в том смысле, что они не разделяют одну и ту же базовую память; изменение одной не повлияет на другие).
Я не знаю лучшего способа инициализации такой коллекции, и я бы не стал не думаю, что использование collect
(или понимание) здесь плохая идея. Для коллекций идентичных объектов fill
предоставляет полезный ярлык, но он не будет применяться здесь, потому что все подсписки будут связаны.
Теперь, если все внутренние подсписки имеют одинаковую длину, вы можете переключиться на немного другую структуру данных: вектор векторов кортежей:
julia> l2 = [Tuple{Int64,Int64,Float64}[] for _ in 1:10]
10-element Array{Array{Tuple{Int64,Int64,Float64},1},1}:
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
julia> push!(l2[2], (1,2,pi))
1-element Array{Tuple{Int64,Int64,Float64},1}:
(1, 2, 3.141592653589793)
julia> l2
10-element Array{Array{Tuple{Int64,Int64,Float64},1},1}:
[]
[(1, 2, 3.141592653589793)]
[]
[]
[]
[]
[]
[]
[]
[]