Python: Mengurutkan Elemen List
Di dalam bahasa pemrograman python, list merupakan struktur data yang sangat fleksibel. List bersifat mutable yang artinya elemen-elemen di dalamnya dapat dimodifikasi termasuk juga dilakukan pengurutan (sorting). Selain itu, sebuah list dapat menyimpan elemen dengan tipe data apa saja mulai dari numerik, string hingga struktur data yang lebih kompleks termasuk tipe list itu sendiri.
Pertanyaan yang mungkin muncul, jika elemen di dalam sebuah list dapat menyimpan berbagai tipe data, bagaimana kita dapat mengurutkannya dan apakah sama seperti pengurutan pada data-data numerik atau string?
Pada tutorial ini, kita akan mengupas secara detail bagaimana pengurutan atau sorting dapat dilakukan pada sebuah list. Pembahasan akan dimulai dengan pengurutan list yang memiliki elemen sederhana seperti numerik atau string. Lebih lanjut akan dibahas bagaimana mengurutkan elemen list dengan tipe yang lebih kompleks seperti dictionary dan list.
Pengurutan elemen list dilakukan menggunakan metode sort
. Metode ini bersifat inplace yang berarti proses pengurutan akan dilakukan langsung pada variabel list tersebut dan otomatis akan mengubah urutan elemen di dalamnya tanpa perlu menyimpan hasil pengurutan pada variabel baru.
Terdapat dua parameter opsional yang dapat diatur pada metode sort yaitu:
key
: parameter yang menentukan bagaimana elemen-elemen list akan diurutkan. Merupakan parameter penting untuk mengurutkan elemen-elemen dengan tipe data yang lebih kompleksreverse
: menentukan apakah elemen akan diurutkan secara ascending (dari nilai terkecil ke nilai terbesar) atau secara descending (dari nilai terbesar ke nilai terkecil). Nilai default untuk parameterreverse
adalahFalse
(ascending)
Pada bagian-bagian selanjutnya, kita akan membahas bagaimana melakukan pengurutan list dengan elemen berupa tipe data numerik, string, dictionary dan list.
Data Numerik
List dengan tipe data numerik dapat diurutkan secara langsung tanpa perlu pengaturan apapun. Kecuali untuk pengurutan secara descending, maka perlu mengatur nilai parameter reverse
menjadi True
.
Contoh sorting list dengan elemen numerik
data = [60, 90, 75, 80, 45, 70, 70, 100, 85] print("\nASCENDING:") data.sort() print(data) print("\nDESCENDING:") data.sort(reverse=True) print(data)
# OUTPUT ASCENDING: [45, 60, 70, 70, 75, 80, 85, 90, 100] DESCENDING: [100, 90, 85, 80, 75, 70, 70, 60, 45]
String
Sama seperti tipe data numerik, secara default kita dapat mengurutkan list dengan elemen bertipe string secara langsung. Pengurutan akan dilakukan berdasarkan nilai numerik dari setiap karakter ASCII teks tersebut. Perlu diingat, huruf kapital dan huruf kecil memiliki nilai ASCII yang berbeda. Karakter ASCII untuk huruf kapital memiliki nilai numerik yang lebih kecil dibandingkan huruf kecil. Oleh karena itu, jika terdapat 2 atau lebih elemen memiliki nilai yang sama namun berbeda case (kapital atau kecil), maka secara ascending karakter dengan huruf kapital akan muncul terlebih dahulu dibandingkan huruf kecil.
Jika mengurutkan berdasarkan urutan teks tidaklah cukup, kita dapat mengurutkan elemen list secara kustom dengan mengatur nilai parameter key
. Parameter ini menerima argumen berupa fungsi yang menentukan bagaimana proses pengurutan harus dilakukan. Jika aturan pengurutan sederhana, maka kita dapat menggunakan fungsi lambda, namun jika aturan lebih rumit kita sebaiknya menyimpannya dalam fungsi biasa.
Di bawah ini disajikan 4 contoh pengurutan list dengan elemen string baik secara default maupun menggunakan fungsi tertentu. Berikut penjelasan ringkas dari contoh-contoh yang diberikan:
- Contoh 1-2: mengurutkan elemen secara default berdasarkan nilai elemen list
- Contoh 3: mengurutkan elemen menurut jumlah karakter pada elemen tersebut secara descending. Elemen
"Philippines"
memiliki jumlah karakter terbanyak yaitu 11 karakter sehingga menempati posisi pertama hasil pengurutan. Adapun"Laos"
yang terdiri dari 4 karakter berada pada posisi terakhir pada list yang sudah terturut. - Contoh 4: mengurutkan elemen menurut banyaknya huruf vokal secara ascending. Pada contoh ini, kita membuat fungsi dengan nama
count_vocals
yang akan mengembalikan jumlah huruf vokal pada elemen yang diberikan. Kemudian fungsi menjadi argumen bagi parameterkey
pada metodesort
. Hasil pengurutan akan menempatkan"Myanmar"
dan"Laos"
pada urutan pertama dan kedua dengan jumlah huruf vokal sebanyak 2. Sementara itu elemen pada urutan terakhir adalah"Indonesia"
yang memiliki 5 huruf vokal.
Contoh sorting list dengan elemen string
Contoh 1-2:
aseans = [ "Indonesia", "Brunei", "Thailand", "Vietnam", "Malaysia", "Singapore", "Myanmar", "Philippines", "Laos", "Cambodia", ] # CONTOH 1 print("\nSORT MENURUT ELEMEN (ASC):") aseans.sort() for c in aseans: print(">>> ", c) # CONTOH 2 print("\nSORT MENURUT ELEMEN (DESC):") aseans.sort(reverse=True) for c in aseans: print(">>> ", c)
# OUTPUT SORT MENURUT ELEMEN (ASC): >>> Brunei >>> Cambodia >>> Indonesia >>> Laos >>> Malaysia >>> Myanmar >>> Philippines >>> Singapore >>> Thailand >>> Vietnam SORT MENURUT ELEMEN (DESC): >>> Vietnam >>> Thailand >>> Singapore >>> Philippines >>> Myanmar >>> Malaysia >>> Laos >>> Indonesia >>> Cambodia >>> Brunei
Contoh 3:
print("\nSORT MENURUT PANJANG ELEMEN (DESC):") aseans.sort(key=lambda c: len(c), reverse=True) for c in aseans: print(">>> ", c)
# OUTPUT SORT MENURUT PANJANG ELEMEN (DESC): >>> Philippines >>> Singapore >>> Indonesia >>> Thailand >>> Malaysia >>> Cambodia >>> Vietnam >>> Myanmar >>> Brunei >>> Laos
Contoh 4:
def count_vocal(elemen): vocals = [v for v in elemen if v.lower() in ("aeiou")] return len(vocals) print("\nSORT MENURUT JUMLAH HURUF VOKAL (ASC):") aseans.sort(key=count_vocal) for c in aseans: print(">>> ", c)
# OUTPUT SORT MENURUT JUMLAH HURUF VOKAL (ASC): >>> Myanmar >>> Laos >>> Thailand >>> Vietnam >>> Brunei >>> Philippines >>> Singapore >>> Malaysia >>> Cambodia >>> Indonesia
Dictionary
Jika terdapat list dengan elemen berupa dictionary, dengan cara yang sama seperti pada string kita juga dapat melakukan pengurutan elemen list tersebut. Kita dapat mengakses item di dalam elemen dictionary tersebut, melakukan operasi dan mengembalikan nilai tertentu yang mengatur bagaimana dictionary tersebut akan diurutkan.
Terdapat 3 contoh yang tersaji pada kode di bawah ini dengan penjelasan sebagai berikut:
- Contoh 1: mengurutkan list menurut key
"pop"
secara ascending."Brunei"
yang memiliki jumlah"pop"
paling kecil yaitu0.43
juta akan terurut pada posisi pertama, dan"Indonesia"
dengan jumlah"pop"
sebesar276.36
juta akan berada pada urutan terakhir list. - Contoh 2: mengurutkan list menurut key
"area"
secara descending."Indonesia"
yang memiliki luas area paling besar akan terurut pada posisi pertama, sementara"Singapore"
dengan luas area paling kecil akan terurut pada posisi akhir list. - Contoh 3: mengurutkan list menurut kepadatan (pop/area) secara descending.
"Singapore"
dengan tingkat kepadatan tertinggi akan menempati urutan pertama sementara"Laos"
dengan tingkat kepadatan paling rendah akan terurut pada posisi akhir.
Contoh sorting list dengan elemen dictionary
# CONTOH 1 print("\nSORT MENURUT POPULASI (ASC):") aseans.sort(key=lambda c: c["pop"]) for c in aseans: print(">>> ", c) # CONTOH 2 print("\nSORT MENURUT AREA (DESC):") aseans.sort(key=lambda c: c["area"], reverse=True) for c in aseans: print(">>> ", c) # CONTOH 3 : DENSITY = POP/AREA print("\nSORT MENURUT DENSITY (DESC):") aseans.sort(key=lambda c: c["pop"] / c["area"], reverse=True) for c in aseans: print(">>> ", c)
# OUTPUT SORT MENURUT POPULASI (ASC): >>> {'name': 'Brunei', 'pop': 0.43, 'area': 5765} >>> {'name': 'Singapore', 'pop': 5.85, 'area': 721.5} >>> {'name': 'Laos', 'pop': 7.17, 'area': 236800} >>> {'name': 'Cambodia', 'pop': 16.72, 'area': 181035} >>> {'name': 'Malaysia', 'pop': 32.37, 'area': 330803} >>> {'name': 'Myanmar', 'pop': 54.34, 'area': 676578} >>> {'name': 'Thailand', 'pop': 69.95, 'area': 513120} >>> {'name': 'Vietnam', 'pop': 97.43, 'area': 331210} >>> {'name': 'Philippines', 'pop': 110.83, 'area': 300000} >>> {'name': 'Indonesia', 'pop': 276.36, 'area': 1910931} SORT MENURUT AREA (DESC): >>> {'name': 'Indonesia', 'pop': 276.36, 'area': 1910931} >>> {'name': 'Myanmar', 'pop': 54.34, 'area': 676578} >>> {'name': 'Thailand', 'pop': 69.95, 'area': 513120} >>> {'name': 'Vietnam', 'pop': 97.43, 'area': 331210} >>> {'name': 'Malaysia', 'pop': 32.37, 'area': 330803} >>> {'name': 'Philippines', 'pop': 110.83, 'area': 300000} >>> {'name': 'Laos', 'pop': 7.17, 'area': 236800} >>> {'name': 'Cambodia', 'pop': 16.72, 'area': 181035} >>> {'name': 'Brunei', 'pop': 0.43, 'area': 5765} >>> {'name': 'Singapore', 'pop': 5.85, 'area': 721.5} SORT MENURUT DENSITY (DESC): >>> {'name': 'Singapore', 'pop': 5.85, 'area': 721.5} >>> {'name': 'Philippines', 'pop': 110.83, 'area': 300000} >>> {'name': 'Vietnam', 'pop': 97.43, 'area': 331210} >>> {'name': 'Indonesia', 'pop': 276.36, 'area': 1910931} >>> {'name': 'Thailand', 'pop': 69.95, 'area': 513120} >>> {'name': 'Malaysia', 'pop': 32.37, 'area': 330803} >>> {'name': 'Cambodia', 'pop': 16.72, 'area': 181035} >>> {'name': 'Myanmar', 'pop': 54.34, 'area': 676578} >>> {'name': 'Brunei', 'pop': 0.43, 'area': 5765} >>> {'name': 'Laos', 'pop': 7.17, 'area': 236800}
List
Objek List dapat memiliki elemen berupa list lainnya. Artinya, kita juga dapat melakukan pengurutan secara kustom terhadap elemen-elemennya.
Pada kode di bawah ini, terdapat objek list_of_list
dimana memiliki elemen-elemen berupa list. Masing-masing elemen memiliki panjang dan nilai yang berbeda-beda. Berikut penjelasan ringkas dari contoh-contoh yang disajikan:
- Mengurutkan list berdasarkan banyaknya elemen pada masing-masing elemennya secara ascending. Hasil dari pengurutan akan menempatkan elemen
[34, 10]
pada posisi pertama karena hanya terdiri dari 2 elemen. Sebaliknya, elemen[19, 10, 8, 12, 6, 8]
berada pada posisi terakhir dengan jumlah elemen sebanyak 6. - Mengurutkan list menurut nilai rata-rata elemen dari setiap elemennya secara ascending. Hasil pengurutan menempatkan elemen
[10, 0, 8, 12]
dengan rata-rata sebesar7.5
pada urutan pertama. Sementara itu elemen[34, 10]
dengan rata-rata22
pada urutan terakhir. - Mengurutkan list menurut selisih antara elemen terbesar dan terkecil pada setiap elemen secara descending. Hasil pengurutan menempatkan elemen
[34, 10]
pada urutan pertama dengan selisih sebesar24
. Sementara itu elemen[16, 10, 20]
akan menempati urutan terakhir dengan selisih nilai terbesar dan terkecil yaitu20-10=10
.
Contoh sorting list dengan elemen list
list_on_list = [ [10, 0, 8, 12], [34, 10], [19, 10, 8, 12, 6, 8], [16, 10, 20], ] # CONTOH 1 print("\nSORT MENURUT BANYAK ELEMEN (ASC):") list_on_list.sort(key=lambda item: len(item)) for i in list_on_list: print(i) # CONTOH 2 print("\nSORT MENURUT RATA-RATA NILAI (ASC):") list_on_list.sort(key=lambda item: sum(item)/len(item)) for i in list_on_list: print(i) # CONTOH 3 print("\nSORT MENURUT SELISIH NILAI TERBESAR DAN TERKECIL (DESC):") list_on_list.sort(key=lambda item: max(item) - min(item), reverse=True) for i in list_on_list: print(i)
# OUTPUT SORT MENURUT BANYAK ELEMEN: [34, 10] [16, 10, 20] [10, 0, 8, 12] [19, 10, 8, 12, 6, 8] SORT MENURUT RATA-RATA NILAI (ASC): [10, 0, 8, 12] [19, 10, 8, 12, 6, 8] [16, 10, 20] [34, 10] SORT MENURUT SELISIH NILAI TERBESAR DAN TERKECIL (DESC): [34, 10] [19, 10, 8, 12, 6, 8] [10, 0, 8, 12] [16, 10, 20]
Tentu saja kita juga dapat mengurutkan elemen-elemen dari setiap elemen list utama pada contoh sebelumnya. Misalkan kita akan mengurutkan list berdasarkan banyaknya elemen dari masing-masing elemen list utama secara ascending, kemudian untuk setiap elemen pada setiap elemen utama akan diurutkan lagi secara descending.
Contoh sorting list dengan elemen list
list_on_list = [ [10, 0, 8, 12], [34, 10], [19, 10, 8, 12, 6, 8], [16, 10, 20], ] # sort list utama asc menurut jumlah elemen list_on_list.sort(key=lambda el: len(el)) # mengurutkan elemen secara descending pada setiap elemen list utama for el in list_on_list: el.sort(reverse=True) # menampilkan output for el in list_on_list: print(el)
# OUTPUT [34, 10] [20, 16, 10] [12, 10, 8, 0] [19, 12, 10, 8, 8, 6]
Pada output di atas, dapat dilihat bahwa list terurut berdasarkan banyaknya elemen pada setiap elemennya. Mulai dari elemen pertama yaitu [34, 10]
sebanyak 2 elemen hingga elemen terakhir sebanyak 6 elemen. Begitu pula pada masing-masing elemen pada setiap elemen list utama, seluruhnya terurut dari nilai tertinggi hingga nilai terandah.
Ringkasan
Di dalam tutorial ini telah dibahas bagaimana kita dapat melakukan pengurutan (sorting) elemen-elemen dari list. Pengurutan dapat dilakukan tidak hanya pada list yang berisi elemen numerik atau string saja, namun juga list yang berisi objek lainnya seperti dictionary atau list. Tentu saja meskipun tidak tercakup pada tulisan ini, cara yang sama dapat kita terapkan pada list yang memiliki elemen berupa tipe data lainnya. Dengan menentukan argumen bagi parameter key
pada metode sort
, proses pengurutan dapat dilakukan secara fleksibel tergantung dari fungsi yang diberikan.
Tulisan Lainnya
Dasar-Dasar Pemrograman dengan Python