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說明數組內的元素總數為5

  • Array{String,1}表明當前是一個數組

  • String表明數組內的每個元素都是String類型,如果數組中有多種數據類型,這里會顯示any

  • 1表明這是一個一維向量,如果為二維矩陣,則為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
來源:掘金

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

1
1