24. List methods

Kamu sudah membangun list secara manual dan menelusurinya dengan for dan enumerate. List Python juga dilengkapi method bawaan — function yang melekat pada list dan melakukan pekerjaan umum untukmu: mengurutkan, membalik, menyalin, mencari, menghitung. Pelajari ini dan kamu jarang perlu menulis loop sendiri.

Bab ini menggunakan list dari Bab 22.

Mengurutkan list: .sort() dan sorted()

.sort() menyusun ulang list di tempat — mengubah yang asli.

scores = [30, 12, 7, 24]
scores.sort()
print(scores)   # [7, 12, 24, 30]

Ia juga mengurutkan teks secara alfabet:

names = ["Cara", "Ada", "Ben"]
names.sort()
print(names)   # ['Ada', 'Ben', 'Cara']

sorted(lst) melakukan hal yang sama tapi mengembalikan list baru, membiarkan yang asli tidak berubah:

scores = [30, 12, 7, 24]
ascending = sorted(scores)
print(ascending)   # [7, 12, 24, 30]
print(scores)      # [30, 12, 7, 24]  (unchanged)

Mengurutkan dengan caramu sendiri

Berikan function key untuk mengurutkan berdasarkan nilai yang dihitung, atau reverse=True untuk urutan menurun:

scores = [30, 12, 7, 24]
scores.sort(reverse=True)
print(scores)   # [30, 24, 12, 7]
words = ["banana", "fig", "apple", "kiwi"]
words.sort(key=len)           # sort by string length
print(words)   # ['fig', 'kiwi', 'apple', 'banana']

Buka exercises/24/01-sort.py. Sebuah list angka sudah disediakan. Urutkan secara menaik, cetak, lalu urutkan secara menurun dan cetak lagi.

Membalik list: .reverse()

.reverse() membalik list di tempat:

items = ["a", "b", "c"]
items.reverse()
print(items)   # ['c', 'b', 'a']

Untuk mendapat salinan yang dibalik tanpa mengubah yang asli, gunakan slice items[::-1] atau list(reversed(items)):

items = ["a", "b", "c"]
flipped = items[::-1]
print(flipped)   # ['c', 'b', 'a']
print(items)     # ['a', 'b', 'c']  (unchanged)

Menggabungkan list menjadi teks

", ".join(lst) menyatukan setiap item menjadi satu string, dengan pemisah di antara masing-masing. Item harus berupa string.

fruits = ["apple", "banana", "cherry"]
print(", ".join(fruits))    # apple, banana, cherry
print(" - ".join(fruits))   # apple - banana - cherry
print("".join(fruits))      # applebananacherry

Untuk list angka, konversi terlebih dahulu:

scores = [7, 12, 24, 30]
print(" ".join(str(n) for n in scores))   # 7 12 24 30

Menyalin list: .copy()

.copy() mengembalikan salinan dangkal — list baru dengan item yang sama:

original = [1, 2, 3]
copy = original.copy()
copy[0] = 99
print(original)   # [1, 2, 3]  (unchanged)
print(copy)       # [99, 2, 3]

Tanpa .copy(), menugaskan list ke variable lain memberikan referensi kedua ke list yang sama (dibahas di Bab 22).

Mencari: .index() dan .count()

.index(value) mengembalikan posisi kemunculan pertama:

fruits = ["apple", "banana", "cherry", "banana"]
print(fruits.index("banana"))   # 1

Ia memunculkan ValueError jika nilai tidak ada di list. Periksa dengan in terlebih dahulu jika kamu tidak yakin:

if "grape" in fruits:
    print(fruits.index("grape"))
else:
    print("not found")

.count(value) mengembalikan berapa kali sebuah nilai muncul:

print(fruits.count("banana"))   # 2
print(fruits.count("grape"))    # 0

List comprehension

Sebuah list comprehension membangun list baru dari ekspresi yang diterapkan pada setiap item. Sintaksnya adalah [expression for item in iterable]:

nums = [1, 2, 3, 4, 5]
doubled = [x * 2 for x in nums]
print(doubled)   # [2, 4, 6, 8, 10]

Kamu bisa menambahkan kondisi untuk memfilter item:

evens = [x for x in nums if x % 2 == 0]
print(evens)   # [2, 4]

Ini cara kompak untuk mengungkapkan apa yang seharusnya berupa loop dengan .append. Kamu tidak perlu segera menggunakan comprehension; bentuk loop sama-sama benar. Gunakan mana yang menurutmu lebih jelas.

Pekerjaan Rumah

File pekerjaan rumah ada di exercises/24/homework/.

Soal 1 — Baris belanjaan

Buka exercises/24/homework/01-shopping-line.py. Sebuah list nama item sudah disediakan. Cetak dalam satu baris dipisahkan koma, menggunakan join.

Soal 2 — Tinggi ke rendah

Buka exercises/24/homework/02-high-to-low.py. Sebuah list angka sudah disediakan. Urutkan dari tertinggi ke terendah, lalu cetak dengan join.

Soal 3 — Leaderboard

Buka exercises/24/homework/03-leaderboard.py. Sebuah list nama player yang acak sudah disediakan. Urutkan secara alfabet dan cetak leaderboard bernomor, satu per baris (1. Ada, 2. Ben, ...).

Tantangan — Tiga teratas

Buka exercises/24/homework/04-top-three.py. Sebuah list skor sudah disediakan. Urutkan dari tertinggi pertama, lalu cetak hanya tiga teratas dalam satu baris dipisahkan spasi. Gunakan .sort() dan join, ditambah slice untuk mengambil hanya tiga pertama.

Bingung atau sudah selesai? Buka halaman solusi pekerjaan rumah.