Julia——基本數據結構
預知
這篇文章能被您看到令我很開心,但有些話我必須提前告知您,以免浪費您的時間。
這僅僅是本人的學習筆記,非常粗淺和凌亂,不深入淺出,也不確定未來是否還會對其繼續更新。此文僅適合您用來速覽或消磨時間,內容大體上適合順序閱讀,如有必要,歡迎您聯系我交流。
Julia中涵蓋的基本數據結構如下,本文按此順序介紹:
元組
字典
數組
元組
將有序的元素集合用括號包裹生成元組,中間用逗號隔開,基本用法與Python沒什么不同。
Syntax:
(item1, item2, ...) 復制代碼
實例如下:
myfavoriteanimals = ("penguins", "cats", "sugargliders") # ("penguins", "cats", "sugargliders") myfavoriteanimals[1] # "penguins" myfavoriteanimals[1] = "otters" # 元組是不可變的,無法更新數據 # ERROR: MethodError: no method matching setindex!(::Tuple{String,String,String}, ::String, ::Int64) 復制代碼
與Python不同的是,Julia進行了拓展(1.0版本及以上),元組中的分量可以被命名:
myfavoriteanimals = (bird = "penguins", mammal = "cats", marsupial = "sugargliders") # (bird = "penguins", mammal = "cats", marsupial = "sugargliders") myfavoriteanimals[1] # "penguins" myfavoriteanimals.bird # "penguins" 復制代碼
字典
創建字典需要通過內建的Dict()函數,函數的參數可以是空或者鍵值對,鍵值對需要使用箭頭符號=>進行關聯。
Syntax:
Dict(key1 => value1, key2 => value2, ...) 復制代碼
實例如下:
myphonebook = Dict("Jenny" => "867-5309", "Ghostbusters" => "555-2368") # Dict{String,String} with 2 entries: # "Jenny" => "867-5309" # "Ghostbusters" => "555-2368" myphonebook["Jenny"] # "867-5309" myphonebook["Kramer"] = "555-FILK" # "555-FILK" myphonebook # Dict{String,String} with 3 entries: # "Jenny" => "867-5309" # "Kramer" => "555-FILK" # "Ghostbusters" => "555-2368" 復制代碼
將鍵Kramer從字典中刪除,返回值為鍵Kramer對應的值:
pop!(myphonebook, "Kramer") # "555-FILK" myphonebook # Dict{String,String} with 2 entries: # "Jenny" => "867-5309" # "Ghostbusters" => "555-2368" 復制代碼
不同于元組與數組,字典中的元素是沒有先后之分的,無法通過數字進行索引,在下面的例子中,Julia會嘗試取鍵為"1"時對應的值:
myphonebook[1] # KeyError: key 1 not found 復制代碼
數組
數組與元組均包含有序集合,但數組可以被更新,使用中括號區分數組與元組,基本用法同樣與Python相同:
Syntax:
[item1, item2, ...] 復制代碼
myfriends = ["Ted", "Robyn", "Barney", "Lily", "Marshall"] # 5-element Array{String,1}: # "Ted" # "Robyn" # "Barney" # "Lily" # "Marshall" 復制代碼
返回提示中:
5-element說明數組內的元素總數為5Array{String,1}表明當前是一個數組String表明數組內的每個元素都是String類型,如果數組中有多種數據類型,這里會顯示any1表明這是一個一維向量,如果為二維矩陣,則為Array{String,2},三維為Array{String,3},以此類推,Julia在展示多維數組的維度信息方面比Python易懂很多,后續會看到。
Julia有很多地方與Python也完全不同,比如從1開始索引,或許后邊會少些麻煩,但誰知道呢,你懂的。
myfriends[0] # ERROR: BoundsError: attempt to access 5-element Array{String,1} at index [0] myfriends[1] # "Ted" 復制代碼
再比如在數字數組中追加一個字符串,在Python中輕松做到:
a = [1,2,3] a.append("1") print(a) # [1, 2, 3, '1'] 復制代碼
但在Julia中,可沒有那么自由,如果在字符串數組myfriends中插入數字,就會報錯:
push!(myfriends, 1) # ERROR: MethodError: Cannot `convert` an object of type Int64 to an object of type String 復制代碼
但如果一開始就新建一個包含元素為Any的數組,則可以完成任意類型的插入:
a = [1,2,3,"3"] # 4-element Array{Any,1}: # 1 # 2 # 3 # "3" pop!(a) # "3" a # 看下面,返回信息中提示當前數組內允許Any類型的數據存在 # 3-element Array{Any,1}: # 1 # 2 # 3 push!(a, "1") # 5-element Array{Any,1}: # 1 # 2 # 3 # "1" 復制代碼
Julia中數組的維度信息比Python多很多,下面創建了一個二維數組:
favorites = [["koobideh", "chocolate", "eggs"],["penguins", "cats", "sugargliders"]] # 2-element Array{Array{String,1},1}: # ["koobideh", "chocolate", "eggs"] # ["penguins", "cats", "sugargliders"] 復制代碼
外層的
2-element Array{...}表明最外一層包含兩個元素,所包含的元素都是Array{String,1}類型,1表示最外層維度為1.上面提到外層所包含的每個元素都是
Array{String,1}類型,1表示它們都是1維向量,元素個數沒有告知,但元素類型都是String。
numbers = [[[1], [2], [3]], [[4], [5]]] # 2-element Array{Array{Array{Int64,1},1},1}: # [[1], [2], [3]] # [[4], [5]] 復制代碼
上面的例子則展示了一個三維數組,每一個維度內的元素個數并不需要相同。julia與Python中一樣,默認情況下都是淺拷貝,如果想要進行深拷貝,可以直接使用內建的copy函數:
a = [1,2,3] # 3-element Array{Int64,1}: # 1 # 2 # 3 b = a # 淺拷貝 # 3-element Array{Int64,1}: # 1 # 2 # 3 b[1] = 111 # 111 a,b # ([111, 2, 3], [111, 2, 3]) c = copy(a) # 深拷貝 # 3-element Array{Int64,1}: # 111 # 2 # 3 c[1] = 1 # 1 a, b ,c # ([111, 2, 3], [111, 2, 3], [1, 2, 3]) 復制代碼
以上是Julia中基本的數據結構。
作者:haoxiangchn
來源:掘金
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















