Python: Mengurutkan Elemen List

mengurutkan list python (custom sort)

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 kompleks
  • reverse: 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 parameter reverse adalah False (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 parameter key pada metode sort. 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 yaitu 0.43 juta akan terurut pada posisi pertama, dan "Indonesia" dengan jumlah "pop" sebesar 276.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:

  1. 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.
  2. Mengurutkan list menurut nilai rata-rata elemen dari setiap elemennya secara ascending. Hasil pengurutan menempatkan elemen [10, 0, 8, 12] dengan rata-rata sebesar 7.5 pada urutan pertama. Sementara itu elemen [34, 10] dengan rata-rata 22 pada urutan terakhir.
  3. 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 sebesar 24. Sementara itu elemen [16, 10, 20] akan menempati urutan terakhir dengan selisih nilai terbesar dan terkecil yaitu 20-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

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

Daftar Isi