iT邦幫忙

2021 iThome 鐵人賽

DAY 2
0
Software Development

資料結構與演算法,使用JavaScript與Python系列 第 2

【Day2】[資料結構]-陣列Array

陣列(Array)是一種常見的資料結構,常用來處理相同類型的有序資料,並存放在連續的記憶體空間中。但由於會先宣告固定記憶體空間,容易造成記憶體浪費。

在讀取與修改資料時較快速,因為可以透過索引值index快速找到要的資料位置,但在追加或刪除資料時較費時間。

可以想像在一條街道上,會有連續的門牌號住戶,可以透過這些門牌號去找到你想見的住戶,陣列可以透過這樣索引的方式快速讀取資料。


  • 陣列概觀

https://ithelp.ithome.com.tw/upload/images/20210913/20121027rEIXVBDI39.jpg
宣告了一塊名為Score的陣列,Index為索引值,可以搭配[ ]符號,Score[1]可以找到值為20的資料。

  • 陣列追加資料的情況

https://ithelp.ithome.com.tw/upload/images/20210913/20121027fkxZCsaSFC.jpg
若要插入的位置已有資料,需先依序將它們移位再插入。

  • 陣列刪除資料的情況

https://ithelp.ithome.com.tw/upload/images/20210913/20121027ReSm5SHSCQ.jpg
容易造成記憶體空間的浪費。


多維陣列

  • 二維陣列: 可以視為一種平面,假設下圖表格變數為box,取得值的方式變數名稱[列索引號, 行索引號],因此box[0][2]所指向的值「17」。
    https://ithelp.ithome.com.tw/upload/images/20210913/20121027phmchOVklx.jpg

  • 三維陣列: 可以視為一種立方體,取得值的方式變數名稱[列索引號, 行索引號, 高索引號]。
    https://ithelp.ithome.com.tw/upload/images/20210913/20121027wvDKJusLZf.jpg


JavaScript

//Array

//一維陣列
var a = [1,2,3]
console.log(a[1]) //2

//二維陣列
var b = [[1,2],[3,4],[5,6]]
console.log(b[0][1]) //2

//三維陣列
var c = [[[1,2,3],[4,5,6],[7,8,9]]]
console.log(c[0][1][2]) //6

JavaScript本身就帶有Array資料型態,詳細使用方法可以參考這篇介紹。


Python

#Array
import numpy as np

#一維陣列
a = np.array([1,2,3])
print(a[2]) #3

#二維陣列
b = np.array([[1,2,3],[4,5,6]])
print(b[0][1]) #2

#三維陣列
c = np.array([[[1,2,3],[4,5,6],[7,8,9]]])
print(c[0][1][2]) #6

NumPy是Python的一個套件,大部分人會使用它來運用Array資料型態,與內建的List相比,List在記憶體中儲存的方式有很大的差異。List的每個資料可以是不同的資料型別,因此這些資料在記憶體中的儲存位置是很難以預測的。而Array規定每一個資料都必須有相同的資料型別,它們在記憶體上的儲存位置會完全排在一起,因此Array的存取速度會比List快。


上一篇
【Day1】資料結構 + 演算法
下一篇
【Day3】[資料結構]-鏈結串列Linked List
系列文
資料結構與演算法,使用JavaScript與Python35

1 則留言

0
WeiYuan
iT邦新手 4 級 ‧ 2021-09-22 23:24:07

小補充一下,Python 其實有內建 Array 這種資料型態,只是很少用。

https://docs.python.org/3/library/array.html

Frank iT邦新手 5 級 ‧ 2021-10-04 15:41:32 檢舉

原來!! 哈哈,受教了,感謝~ 真的看到使用內建的人都只用List/images/emoticon/emoticon12.gif

我要留言

立即登入留言