Julia newbe 在这里,从 python 过渡。
所以,我想在 Python 中构建我称之为 list 的东西,由由列表组成的列表组成。就我而言,它是一个 1000 长的列表,其元素是 3 个列表的列表。
到目前为止,我已经这样做了:
BIG_LIST = collect(Array{Int64,1}[[],[],[]] for i in 1:1000)
当所有三个最内部的列表都由整数组成时,这达到了我的目的。
现在我需要其中 2 个是整数,而第三个是 Float。
这可能吗?我该怎么做?
如果您还可以更好地解释如何正确初始化这些对象,那就太好了。我知道收集不是这里的最佳选择。
请注意,3 个内部列表的长度在 3 个之间是相同的,但在此过程中可能会有所不同。
最佳答案
首先,如果您知道中间列表总是有 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)]
[]
[]
[]
[]
[]
[]
[]
[]
关于arrays - Julia:不同类型的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60418192/