Array teks yang sudah tersimpan menuntut pengolahan lanjutan: kapitalisasi nama kota diseragamkan, spasi sisa input dibuang, nomor antrian diberi nol di depan. Di Python murni kita menulis loop yang memanggil method str satu per satu. NumPy menyediakan jalur yang lebih sesuai dengan gaya array: namespace np.strings, kumpulan fungsi string yang bekerja sebagai ufunc pada seluruh array sekaligus.
Namespace ini dirilis resmi di NumPy 2.0 dan mengoperasikan dtype <U berlebar tetap yang kita kenal dari Chapter Tipe Data String dan Object. Cakupan bab ini:
- Mengubah kasus huruf dengan
upperdanlower. - Membersihkan spasi di tepi string dengan
strip. - Membandingkan mekanisme ufunc dengan list comprehension Python.
- Merapikan tampilan dengan
zfilldancenter.
Kasus Huruf dengan upper dan lower #
Setiap fungsi di np.strings menerima array dan mengembalikan array baru; array aslinya tidak diubah. Proses per elemen berjalan di dalam C tanpa loop Python, dan dtype lebar tetap dipertahankan pada hasilnya.
import numpy as np
kota = np.array(["jakarta", "bandung", "surabaya"])
atas = np.strings.upper(kota)
print(atas)
print(atas.dtype)
campur = np.array(["JAKARTA", "Bandung", "suRabAya"])
print(np.strings.lower(campur))Output yang Dihasilkan:
['JAKARTA' 'BANDUNG' 'SURABAYA']
<U8
['jakarta' 'bandung' 'surabaya']Bedah baris per baris:
- Baris 3-4 (
np.strings.upper(kota)): fungsi membaca array bertipe<U8dan mengembalikan array baru berisi huruf besar; variabelkotatetap berisi huruf kecil. - Baris 5 (
atas.dtype): dtype hasil tetap<U8. Lebar tetap tidak dihitung ulang setelah operasi; semantik<Udari Chapter Tipe Data String dan Object tetap berlaku. - Baris 8 (
np.strings.lower): input kapitalisasi yang tidak seragam tidak menjadi masalah karena setiap elemen diproses secara mandiri.
strip Membersihkan Spasi di Tepi String #
Data hasil input pengguna sering membawa spasi terkemuka atau spasi penutup. np.strings.strip membuang whitespace di kedua tepi setiap elemen; spasi yang berada di tengah string tidak disentuh.
import numpy as np
kotor = np.array([" medan", "solo "])
print(kotor)
bersih = np.strings.strip(kotor)
print(bersih)
print(bersih.dtype)
print(bersih.tolist())Output yang Dihasilkan:
[' medan' 'solo ']
['medan' 'solo']
<U7
['medan', 'solo']Tiga hal yang perlu dicermati:
- Baris 3-4 (
print(kotor)): spasi pada data input adalah data sungguhan, sehingga ikut tercetak apa adanya. - Baris 6-7 (
strip): seluruh elemen kini bersih tanpa loop eksplisit. - Baris 8 (
bersih.dtype): dtype hasil tetap<U7; lebar tidak menyusut otomatis meski isi sudah pendek, dan baris 9 (tolist()) mengonversi hasil ke liststrPython murni untuk cetakan tanpa jejak dtype.
Setara List Comprehension, Berbeda Mekanisme #
Untuk data yang sama, list comprehension Python menghasilkan nilai yang identik. Kita buktikan dan cocokkan keduanya:
import numpy as np
kota = np.array(["jakarta", "bandung", "surabaya"])
hasil_numpy = np.strings.upper(kota)
hasil_python = [k.upper() for k in kota]
print(hasil_numpy)
print(hasil_python)
print(hasil_numpy.tolist() == hasil_python)Output yang Dihasilkan:
['JAKARTA' 'BANDUNG' 'SURABAYA']
['JAKARTA', 'BANDUNG', 'SURABAYA']
TrueHasilnya sama persis; yang berbeda adalah mekanisme di balik layar:
- List comprehension: interpreter mengeksekusi bytecode Python per elemen, memanggil method
str.uppersatu per satu, dan menyusun list objek baru. np.strings.upper: satu panggilan ufunc menjalankan iterasi di C di atas blok memori array, tanpa membuat objek Python per elemen untuk dtype<U.
Untuk tiga elemen, keduanya praktis sama cepat. Untuk ratusan ribu elemen yang sudah berbentuk array, jalur ufunc menghindari biaya loop Python dan biasanya jauh lebih cepat.
zfill dan center Merapikan Tampilan #
Dua fungsi pembentuk tampilan yang sering dipakai adalah zfill (isi nol di kiri hingga lebar tertentu) dan center (tata teks di tengah lebar tetap dengan karakter pengisi).
import numpy as np
antrian = np.array(["7", "42", "128"])
print(np.strings.zfill(antrian, 4))
label = np.array(["VIP", "REG"])
print(np.strings.center(label, 8, "*"))Output yang Dihasilkan:
['0007' '0042' '0128']
['**VIP***' '**REG***']- Baris 4 (
zfill(antrian, 4)): setiap nomor diberi nol di kiri hingga panjang 4; lebar yang sama membuat nomor tetap rapi saat diurutkan sebagai teks. - Baris 7 (
center(label, 8, "*")):"VIP"mendapat 2 tanda bintang di kiri dan 3 di kanan karena sisa lebar yang ganjil diberikan lebih banyak ke sisi kanan.
Tabel ringkas fungsi yang sudah kita coba:
| Fungsi | Tugas | Contoh hasil |
|---|---|---|
upper / lower | Seragamkan kasus huruf | "surabaya" -> "SURABAYA" |
strip | Buang whitespace di tepi | " medan" -> "medan" |
zfill | Isi nol di kiri | "42" -> "0042" |
center | Pusatkan dalam lebar tetap | "VIP" -> "**VIP***" |
Namespace np.strings masih memiliki banyak anggota lain untuk pencarian dan penggantian yang kita bahas pada bab-bab berikutnya. Apapun fungsinya, pola kerjanya selalu sama: array bertipe <U masuk, array baru keluar, dan array sumber tidak berubah — semantik yang berangkat dari dtype pada Chapter Tipe Data String dan Object.