Array in Python. What does this have to do with stack?
Dalam Python, Array merupakan sekumpulan data. Namun terkadang terdengar sedikit membingungkan dikarenakan fungsinya yang sama seperti List. Pertanyaanya, lalu apa bedanya?
Jika dilihat dari ciri cirinya, Array memiliki beberapa ciri seperti berikut :
- Array hanya mampu menyimpan tipe data yang sama seperti Float, Boolean, String dan Interger. Pertanyaan lainnya, Apakah Array mampu menyimpan tipe data seperti Dictionary, Set, Tuple dan List? jawabannya simpelnya adalah tidak.
- Sama seperti List, Array juga memiliki Indeks untuk setiap elemennya yang dimulai dari 0.
- Tipe data yang ada dalam Array harus sama, artinya data yang disimpan harus memiliki tipe data yang sama.
- Elemen yang ada dalam Array dapat dimanipulasi atau diubah.
Jika dilihat dari ciri-cirinya, Array memang tidak terlihat spesial. Namun ada hal menarik yang Array miliki yaitu cara kerjanya.
Seperti yang biasa ditulis di beberapa artikel, Array meniru sistem yang dinamakan RAM (Random Access Memory). Lalu apa saja yang menarik? kira kira seperti ini
- Konsep 0(1) Access
Intinya, suatu data pada alamat memory 20 dapat diakses secara langsung tanpa perlu melewati memory dari 1–19. Hal ini menjadikan Array bisa sangat cepat dalam mengakses data walaupun jumlahnya banyak. - Operasi matematika dibalik konsep 0(1) Access
Jika ditanya bagaimana cara komputer dapat mengakses data secepat yang diceritakan pada konsep 0(1)? jawabannya ada di rumus matematika sederhana (Pointer Arithmetic) lalu bagaimana cara kerjanya? caranya dengan menggunakan rumus Alamat = BaseAddress + (Index x UkuranElemen). Ketika Anda membuat list di Python, misalnyaA = [10, 20, 30, 40], komputer meminta seblok memori berurutan di RAM. Misalkan blok memori itu dimulai di alamat fisik 0x100 (Base Address). Jika kita asumsikan dalam sistem 64-bit, ukuran satu referensi (pointer) adalah 8 bytes maka :
A[0]: 0x100 + (0 x 8) = 0x100
A[1]: 0x100 + (1 x 8) = 0x108
A[2]: 0x100 + (2 x 8) = 0x116
A[3]: 0x100 + (3 x 8) = 0x124
Jika kamu mencari A[3] maka komputer akan langsung menuju ke alamat 124 tanpa perlu melewati alamat 100 terlebuh dahulu - C style vs Python list
Jika membandingkan antaraimport arraydanList[]maka akan ada perbedaan sepertiimport arrayisi memori berurutan tersebut adalah datanya langsung
index 0 = datanya 10: alamat 0x100
index 1 = datanya 20: alamat 0x108
index 2 = datanya 30: alamat 0x116
index 3 = datanya 40: alamat 0x124
sementaraList[]datanya akan seperti ini
Alamat 0x500: Data Integer (10)
Alamat 0x600: Data Integer (20)
Alamat 0x700: Data String ("Hello")
Dari sini mungkin ada sebuah pertanyaan “kenapa komputer tidak menaruh data yang berbeda secara berdekatan saja?” jawaban simpelnya YA. komputer memang dapat melakukannya lalu kenapa array hanya boleh menyimpan data dengan tipe data yang sama? syarat untuk menaruh data secara berdekatan adalah menyamakan ukurannya. Artinya dalam rumus Alamat = BaseAddress + (Index x UkuranElemen) hanya dapat digunakan oleh komputer jika ukuran elemen sama.
Get Zidane Arrizqi Akmal’s stories in your inbox
Join Medium for free to get updates from this writer.
Namun bagaimana jika skenario diatas dicoba? kira-kira hal yang akan terjadi seperti ini
Misal kita mencampur data dengan ukuran berbeda-beda secara berurutan:
- Index 0: Integer (4 byte) -> menempati alamat 100–103
- Index 1: String “Abarth” (4 byte) -> menempati alamat 104–107
- Index 2: String “Aston Martin”(12 byte) -> menempati alamat 108–119
- Index 3: Boolean (1 byte) -> menempati alamat 120
Sekarang, CPU diminta “Ambilkan data di Index ke-3!”
pada saat ini ketika komputer akan menggunakan rumus maka akan jadi seperti Alamat = 100 + (3 x ???) kenapa itu bisa terjadi? dikarenakan komputer tidak tau ukuran dari file yang ada di index ke-3 maka otomatis rumus ini tidak dapat digunakan dan komputer harus menebak terlebih dahulu berapa ukurannya untuk mendapat alamat.
In reality, arrays can store different data types, but only if they are the same size. Another fact is that computers do not actually know the size of the data at a given index, but computers can use that formula because know that all data is the same size.
Dari sini mungkin sudah terlihat hubungan antara Array dan Stack. Secara harfiah, Stack berarti “Tumpukan”. Dalam dunia pemrograman, Stack adalah sebuah struktur data linear yang mengikuti prinsip urutan tertentu untuk menyimpan dan mengambil data. Ada sebuah prinsip yang dimiliki oleh stack yaitu LIFO (Last In, First Out). Artinya, data yang terakhir dimasukkan adalah data yang pertama kali dikeluarkan. Stack hanya memiliki 2 operasi yaitu Push (Menambahkan elemen ke posisi paling atas) dan Pop (Menghapus atau mengambil elemen dari posisi paling atas). Jika ditanya lebih jelas apa hubungan antara Stack dan Array? jawabannya adalah Array adalah salah satu bentuk dari stack. Sejatinya, Stack hanyalah semacam konsep. Namun Stack punya aturan yang tidak dimiliki Array yaitu
- Stack tidak dapat mengambil data dari tengah sementara Array dapat dengan bebas mengambil data dari manapun
- Data yang ditambah pada stack hanya boleh ditambah dari ujung dan diambil dari ujung juga
Setelah hal-hal yang menarik dari Array, kita bisa beralih ke penerapan Array ke pyhton. Dalam python, penggunaan Array harus diawali dengan menggunakan import array kira kira seperti ini
import array
# first method
example_of_array = array.array("i", [10,20,30])
print("first method :", example_of_array)
# second method
example_of_array = array.array("i", [10,20,30])
print("second method :", end=" ")
for Z in range(0, 3):
print(example_of_array[Z], end=" ")Jika ditanya, Array dapat menyimpan tipe data apa saja? Array mampu menyimpan data seperti interger, float dan string. Jika ditanya apakah boolean tidak bisa? jawabannya bisa namun secara tidak langsung karena Array tidak mampu diisi True/False , sebagai gantinya masih ada penggunaan angka 1 untuk true dan 0 untuk false. Namun ada sedikit pembeda dalam penggunaanya kira kira seperti ini :
'i'untuk interger'f'untuk float'd'untuk double
Double Precision Float adalah tipe data yang menyimpan angka desimal yang memiliki banyak angka dibelakangnya'u'untuk unicode, merupakan urutan titik kode yang merupakan angka dari 0 hingga 0x10FFFF (1.114.111 desimal)
import array
# example of an array containing integers
ex_int = array.array("i", [10,20,30])
# ^
# |
# type data
print("interger :", ex_int)
# example of an array containing float
ex_float = array.array("f", [10.5,20.5,30.5])
print("float :", ex_float)
# example of an array containing double
ex_double = array.array("d", [10.175392452189,20.141592653589793,30.0000928364865])
print("double :", ex_double)
# example of an array containing unicode
ex_unicode = array.array("u", ["\u260E"])
print("unicode", ex_unicode)Array termasuk data yang dapat dimanipulasi diantaranya adalah dapat menambah, menghapus, mengubah, membalik dan memotong. Array juga memiliki fitur seperti menghitung elemen pada array dan mengakses elemen sesuai indeks pada Array.
- Menambah elemen menggunakan
.insert()dan.extend()
Fitur ini memungkinkan programmer menambah elemen yang ke dalam Array. Namun fitur.insert()hanya dapat menambah 1 elemen saja. Programmer juga dapat mengatur urutan dimana elemen itu akan diletakkan menggunakan indeks maupun setelah elemen yang dipilih. Sementara.extend()dapat menambah lebih banyak elemen ke dalam Array
import array
# example of adding elements to an Array
variable_for_insert = array.array("i", [10,20,30,40])
print("before insert :", variable_for_insert)
variable_for_insert.insert(4,50)
print("after insert using indeks:", variable_for_insert)
variable_for_insert.insert(50,60)
print("after insert using element :",variable_for_insert)
# example of adding elements to an Array using extend
variable_for_extend = array.array("i", [100,200,300,400])
print("\nbefore extend :", variable_for_extend)
variable_for_extend.extend([500,600,700])
print("after extend :", variable_for_extend)- Menghapus elemen menggunakan
.remove()dan.pop()
Ada sedikit perbedaan antara.remove()dan.pop()yaitu.remove()akan menghapus elemen berdasarkan element yang dimaksut, artinya jika anda menulis element 1 maka yang akan terhapus adalah 1 pada yang tersimpan dalam Array. Berbeda dengan.remove(),.pop()menggunakan indeks untuk menghapus elemen.
import array
# example of removing elements in an Array
variable_for_remove = array.array("i", [1,2,3,4])
print("before removing :", variable_for_remove)
variable_for_remove.pop(1) # deleting elements by index
print("after pop :", variable_for_remove)
variable_for_remove = array.array("i", [1,2,3,4])
variable_for_remove.remove(1) # deleting elements according to elements
print("after removing :", variable_for_remove)- Mengubah elemen pada Array
Sama seperti tipe data lainnya seperti list, set dan lainnya, Array juga memiliki fitur untuk mengubah elemen yang ada menjadi elemen lain dengan menggunakan indeks
import array
# example of changing elements in an Array
example_variable = array.array("i", [1,2,3,4,5,6,7,8,9,10])
print("before changing :",example_variable)
example_variable[5] = 66
print("after changing :",example_variable)- Membalik elemen pada Array menggunakan
.reverse()
Simpelnya fitur ini akan menyebabkan urutan elemen yang ada pada Array akan terbalik
import array
# example of reversing elements in an Array
example_for_reverse = array.array("i", [100,200,300,400,500,600])
print("before reverse :",example_for_reverse)
example_for_reverse.reverse()
print("after reverse :",example_for_reverse)- Memotong Array
Untuk mencetak rentang elemen tertentu dari array, kita menggunakan operasi Slice. Operasi Slice dilakukan pada array dengan menggunakan titik dua(:). Ada beberapa cara yang dapat digunakan untuk melakukan operasi ini diantaranya
variable[indeks:]hanya menampilkan elemen diluar indeks tersebut. indeks ini biasa dimulai dari 1, bukan dari 0variable[-indeks:]hanya menampilkan elemen yang ada pada indeks tersebut. karena indeks memiliki tanda(-)maka indeks dimulai dari ahir urutan pada Arrayvariable[:indeks]hanya menampilkan elemen yang ada pada indeks tersebut. indeks ini biasa dimulai dari 1, bukan 0variable[:-indeks]hanya menampilkan elemen diluar indeks tersebut, karena indeks memiliki tanda(-)maka indeks dimulai dari ahir urutan pada Arrayvariable[indeks:indeks]hanya menampilkan elemen yang ada pada rentang kedua indeks tersebut. Pada bagianvariable[indeks:...]tidak akan ditampilkan namun pada bagianvariable[...:indeks]tetap akan ditampilkan. indeks ini biasa dimulai dari 1, bukan 0variable[-indeks:-indeks]menampilkan elemen yang ada padavariable[-indeks:...]namun tidak menampilkan elemen yang ada padavariable[...:-indeks]
import array
# example of cutting in an Array
example = array.array("i", [100,200,300,400,500,600,700,800])
print("before cutting :", example)
print("after cutting (number 1 operation) :",example[5:])
print("after cutting (number 2 operation) :",example[-5:])
print("after cutting (number 3 operation) :",example[:5])
print("after cutting (number 4 operation) :",example[:-5])
print("after cutting (number 5 operation) :",example[2:5])
print("after cutting (number 6 operation) :",example[-8:-5])- Menghitung jumlah elemen menggunakan
.count()fitur ini berguna bagi programmer yang ingin mengetahui jumlah elemen yang ada pada suatu Array
import array
# example of calculating elements in an Array
variable_for_count = array.array("i", [33,11,22,33,44,33,55,33])
print("the number 33 in variable_for_count :",variable_for_count.count(33))- Mengakses elemen sesuai indeks pada Array
Setiap elemen pada Array memiliki indeksnya masing-masing menyebabkan setiap elemen dapat diakses atau dicetak
import array
# example of accessing elements in an Array using an index
exmpl = array.array("d", [1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8])
print("access to index 2 :",exmpl[2])
print("access to index 6 :",exmpl[6])
print("access to index 1 :",exmpl[1])The features in Array may seem ordinary, but its advantage lies in its simplicity compared to list.




