A.20. Python Slice (Data Sequence Slicing)
Pada chapter ini kita akan belajar tentang penerapan teknik slice pada data sequence.
A.20.1. Pengenalan slice
Teknik slice atau slicing digunakan untuk mengakses sekumpulan element/item dari data sequence sesuai dengan index yang diinginkan. Data sequence sendiri adalah klasifikasi tipe data yang berisi kumpulan data terurut atau sekuensial. Yang termasuk dalam tipe data sequence adalah list, range, tuple, dan string.
Operasi slice mengembalikan data bertipe sama seperti data aslinya, sedangkan isi sesuai dengan index yang ditentukan.
Salah satu penerapan slice adalah dengan memanfaatkan notasi data[start:end] atau data[start:end:step].
startadalah index awal slicing. Misalkan indexstartadalah2maka slicing dimulai dari element index ke-2.endadalah index akhir slicing. Misalkan indexendadalah5maka slicing berakhir sebelum element index ke-5 (yang berarti element ke-4).stepby default nilainya1, kegunaannya untuk menentukan apakah element yang dikembalikan adalah setiapstepindex.
Lanjut praktek. Pada contoh berikut disiapkan variabel data_str berisi string hello world yang kemudian akan di-slice datanya.
data_str = "hello world"
print(data_str)
# output ➜ hello world
Variabel data_str visualisasinya dalam bentuk sequence kurang lebih seperti ini. Lebar element data adalah 11 dengan index awal 0 dan index akhir 10.

Ok, sekarang kita coba slice data_str:
Slicing element index ke-0 hingga ke-2, maka notasinya adalah
data_str[0:3]. Perlu diketahui bahwaenddiisi dengan nilaiindex-1, jadi jika ingin mengambil element hingga index ke-2 maka nilaiendadalah3.data_str = "hello world"
slice1 = data_str[0:3]
print(slice1)
# output ➜ hel
Slicing element index ke-2 hingga ke-7, maka notasinya adalah
data_str[2:8].slice2 = data_str[2:8]
print(slice2)
# output ➜ llo wo
Slicing element hingga index ke-4, maka notasinya adalah
data_str[:5]. Nilaistartjika tidak diisi maka default-nya adalah0. Notasi tersebut adalah ekuivalen dengandata_str[0:5].slice3 = data_str[:5]
print(slice3)
# output ➜ hello
Slicing element dimulai index ke-4, maka notasinya adalah
data_str[4:]. Nilaiendjika tidak diisi maka default-nya adalah nilai jumlah element data (ekuivalen dengan notasidata_str[4:len(data_str)]).slice4 = data_str[4:]
print(slice4)
# output ➜ o world
Slicing element dimulai index ke-3 hingga ke-6 dengan element yang dikembalikan adalah setiap 1 element, maka notasinya adalah
data_str[3:7:1].slice5 = data_str[3:7:1]
print(slice5)
# output ➜ lo w
Slicing element dimulai index ke-2 hingga ke-8 dengan ketentuan element yang dikembalikan adalah setiap 2 element, notasinya:
data_str[2:9:2].slice6 = data_str[2:9:2]
print(slice6)
# output ➜ lowr
Slicing seluruh element bisa dilakukan dengan notasi
data_str[:]. Notasi tersebut adalah ekuivalen dengandata_str[0:len(data_str)].slice7 = data_str[:]
print(slice7)
# output ➜ hello world
Slicing seluruh element dengan ketentuan element yang dikembalikan adalah setiap 2 element, ditulis dengan notasi
data_str[::2]. Notasi tersebut adalah ekuivalen dengandata_str[0:len(data_str):2].slice8 = data_str[::2]
print(slice8)
# output ➜ hlowrd
◉ Tentang slicing seluruh element
Slicing seluruh element bisa dilakukan dengan notasi data[0:len(data)] atau data[0:len(data):1]. Sebagai contoh, 3 statement printing tuple berikut memunculkan output yang sama meskipun data tuple yang ditampilkan adalah dari variabel yang berbeda.
data_tuple = (1, 3, 5, 7, 9, 11, 13, 14)
print(data_tuple)
# output ➜ (1, 3, 5, 7, 9, 11, 13, 14)
tuple1 = data_tuple[0:len(data_tuple)]
print(tuple1)
# output ➜ (1, 3, 5, 7, 9, 11, 13, 14)
tuple2 = data_tuple[0:len(data_tuple):1]
print(tuple2)
# output ➜ (1, 3, 5, 7, 9, 11, 13, 14)
Ok, lalu kenapa harus menggunakan teknik ini? padahal operasi assignment data tuple ke variabel baru jauh lebih mudah, misalnya:
tuple3 = data_tuple
print(tuple3)
# output ➜ (1, 3, 5, 7, 9, 11, 13, 14)
Statement assignment tuple3 di atas isinya adalah sama dengan data hasil operasi slicing tuple1 dan tuple2, namun reference-nya adalah berbeda.
Pembahasan detail mengenai reference ada di chapter Object ID & Reference
A.20.2. Fungsi slice()
Notasi penulisan slice bisa disimpan pada suatu variabel dengan memanfaatkan fungsi slice(). Nilai start, end, dan step dijadikan argument pemanggilan fungsi tersebut dengan notasi slice(start, end) atau slice(start, end, step).
Pada contoh berikut, perhatikan bagaimana perbedaan slicing pada list1, list2, dan list3:
data_list = [2, 4, 6, 7, 9, 11, 13]
print(data_list)
# output ➜ [2, 4, 6, 7, 9, 11, 13]
list1 = data_list[2:6:1]
print(list1)
# output ➜ [6, 7, 9, 11]
list2 = data_list[slice(2, 6, 1)]
print(list2)
# output ➜ [6, 7, 9, 11]
sl = slice(2, 6)
list3 = data_list[sl]
print(list3)
# output ➜ [6, 7, 9, 11]