Lewati ke konten utama

Tutorial Python Set dan Teori Himpunan

Pelajari tentang Python set: apa itu, cara membuatnya, kapan menggunakannya, fungsi bawaan dan keterkaitannya dengan operasi teori himpunan.
· 13 mnt Baca

Jelajahi bersama AI

Python Sets vs Lists and Tuples

List dan tuple adalah tipe data standar Python yang menyimpan nilai dalam urutan. Set adalah tipe data standar Python lain yang juga menyimpan nilai. Perbedaan utamanya adalah set, tidak seperti list atau tuple, tidak dapat memiliki kemunculan elemen yang sama lebih dari sekali dan menyimpan nilai yang tidak berurutan.

Keuntungan Menggunakan Python Set

Karena set tidak dapat memiliki kemunculan elemen yang sama lebih dari sekali, set sangat berguna untuk menghapus nilai duplikat dari list atau tuple secara efisien dan untuk melakukan operasi matematika umum seperti union dan intersection.

Jika Anda ingin mengasah keterampilan Python Anda, atau Anda masih pemula, pastikan untuk melihat jalur karier Python Programmer di DataCamp.

Dengan itu, mari kita mulai.

Cara Membuat Set di Python

Set adalah koleksi yang dapat diubah (mutable) berisi nilai-nilai tak berubah (immutable) yang berbeda (unik) dan tidak berurutan.

Anda dapat menginisialisasi set kosong dengan menggunakan set().

emptySet = set()

Untuk menginisialisasi set dengan nilai, Anda dapat meneruskan list ke set().

dataScientist = set(['Python', 'R', 'SQL', 'Git', 'Tableau', 'SAS'])
dataEngineer = set(['Python', 'Java', 'Scala', 'Git', 'SQL', 'Hadoop'])

Jalankan dan edit kode dari Tutorial ini secara online

Jalankan kode

Inisialisasi Set

Jika Anda melihat output dari variabel dataScientist dan dataEngineer di atas, perhatikan bahwa nilai dalam set tidak dalam urutan saat ditambahkan. Ini karena set tidak berurutan.

Set yang berisi nilai juga dapat diinisialisasi dengan menggunakan kurung kurawal.

dataScientist = {'Python', 'R', 'SQL', 'Git', 'Tableau', 'SAS'}
dataEngineer = {'Python', 'Java', 'Scala', 'Git', 'SQL', 'Hadoop'}

Inisialisasi Set

Perlu diingat bahwa kurung kurawal hanya dapat digunakan untuk menginisialisasi set yang berisi nilai. Gambar di bawah menunjukkan bahwa menggunakan kurung kurawal tanpa nilai adalah salah satu cara untuk menginisialisasi dictionary, bukan set.

Inisialisasi Set

Menambahkan dan Menghapus Nilai dari Python Set

Untuk menambah atau menghapus nilai dari set, pertama-tama Anda harus menginisialisasi set.

# Initialize set with values
graphicDesigner = {'InDesign', 'Photoshop', 'Acrobat', 'Premiere', 'Bridge'}

Menambahkan Nilai ke Python Set

Anda dapat menggunakan metode add untuk menambahkan nilai ke set.

graphicDesigner.add('Illustrator')

Tambahkan Nilai ke Set

Penting untuk dicatat bahwa Anda hanya dapat menambahkan nilai yang immutable (seperti string atau tuple) ke set. Misalnya, Anda akan mendapatkan TypeError jika mencoba menambahkan list ke set.

graphicDesigner.add(['Powerpoint', 'Blender'])

Tambahkan Nilai ke Set

Menghapus Nilai dari Set di Python

Ada beberapa cara untuk menghapus nilai dari set.

Opsi 1: Anda dapat menggunakan metode remove untuk menghapus nilai dari set.

graphicDesigner.remove('Illustrator')

Hapus Nilai dari Set

Kekurangan metode ini adalah jika Anda mencoba menghapus nilai yang tidak ada di set, Anda akan mendapatkan KeyError.

Hapus Nilai dari Set

Opsi 2: Anda dapat menggunakan metode discard untuk menghapus nilai dari set.

graphicDesigner.discard('Premiere')

Hapus Nilai dari Set

Keuntungan pendekatan ini dibandingkan metode remove adalah jika Anda mencoba menghapus nilai yang bukan bagian dari set, Anda tidak akan mendapatkan KeyError. Jika Anda familier dengan dictionary, Anda mungkin menemukan bahwa ini bekerja mirip dengan metode get pada dictionary.

Opsi 3: Anda juga dapat menggunakan metode pop untuk menghapus dan mengembalikan sebuah nilai sembarang dari set.

graphicDesigner.pop()

Hapus Nilai dari Set

Penting untuk dicatat bahwa metode ini akan menimbulkan KeyError jika set kosong.

Menghapus Semua Nilai dari Python Set

Anda dapat menggunakan metode clear untuk menghapus semua nilai dari set.

graphicDesigner.clear()

Hapus Semua Nilai dari Set

Memperbarui Nilai Python Set

Metode update menambahkan elemen dari sebuah set ke set lain. Metode ini memerlukan satu argumen yang bisa berupa set, list, tuple, atau dictionary. Metode .update() secara otomatis mengonversi tipe data lain menjadi set dan menambahkannya ke set.

Pada contoh ini, kita menginisialisasi tiga set dan menggunakan fungsi update untuk menambahkan elemen dari set2 ke set1 lalu dari set3 ke set1.

# Initialize 3 sets
set1 = set([7, 10, 11, 13])
set2 = set([11, 8, 9, 12, 14, 15])
set3 = {'d', 'f', 'h'}

# Update set1 with set2
set1.update(set2)
print(set1)

# Update set1 with set3
set1.update(set3)
print(set1)

Pembaruan Set Python

Melakukan Iterasi pada Python Set

Seperti banyak tipe data standar Python, Anda dapat melakukan iterasi pada set.

# Initialize a set
dataScientist = {'Python', 'R', 'SQL', 'Git', 'Tableau', 'SAS'}

for skill in dataScientist:
    print(skill)

Iterasi pada Set

Jika Anda melihat output saat mencetak masing-masing nilai dalam dataScientist, perhatikan bahwa nilai yang dicetak dari set tidak dalam urutan saat ditambahkan. Ini karena set tidak berurutan.

Mengonversi Python Set menjadi Nilai Berurutan

Tutorial ini menekankan bahwa set tidak berurutan. Jika Anda perlu mendapatkan nilai dari set dalam bentuk berurutan, Anda dapat menggunakan fungsi sorted, yang menghasilkan list yang terurut.

type(sorted(dataScientist))

Konversi Set menjadi Nilai Berurutan

Kode di bawah ini menghasilkan nilai dalam set dataScientist dalam urutan alfabet menurun (Z-A pada kasus ini).

sorted(dataScientist, reverse = True)

Konversi Set menjadi Nilai Berurutan

Menghapus Duplikat dari List di Python

Bagian dari konten di bagian ini telah dibahas sebelumnya dalam tutorial 18 Pertanyaan List Python yang Paling Umum, tetapi penting untuk ditekankan bahwa set adalah cara tercepat untuk menghapus duplikat dari list. Untuk menunjukkannya, mari pelajari perbedaan kinerja antara dua pendekatan.

Pendekatan 1: Gunakan set untuk menghapus duplikat dari list.

print(list(set([1, 2, 3, 1, 7])))

Pendekatan 2: Gunakan list comprehension untuk menghapus duplikat dari list (Jika Anda ingin penyegaran tentang list comprehension, lihat tutorial ini).

def remove_duplicates(original):
    unique = []
    [unique.append(n) for n in original if n not in unique]
    return(unique)

print(remove_duplicates([1, 2, 3, 1, 7]))

Perbedaan kinerja dapat diukur menggunakan pustaka timeit yang memungkinkan Anda mengukur waktu eksekusi kode Python. Kode di bawah menjalankan kode untuk setiap pendekatan sebanyak 10000 kali dan menghasilkan total waktu yang dibutuhkan dalam hitungan detik.

import timeit

# Approach 1: Execution time
print(timeit.timeit('list(set([1, 2, 3, 1, 7]))', number=10000))

# Approach 2: Execution time
print(timeit.timeit('remove_duplicates([1, 2, 3, 1, 7])', globals=globals(), number=10000))

Hapus Duplikat dari List

Perbandingan dua pendekatan ini menunjukkan bahwa menggunakan set untuk menghapus duplikat lebih efisien. Walau perbedaannya tampak kecil, hal ini dapat menghemat banyak waktu jika Anda memiliki list yang sangat besar.

Operasi Set di Python

Salah satu penggunaan umum set di Python adalah menghitung operasi matematika standar seperti union, intersection, difference, dan symmetric difference. Gambar di bawah menunjukkan beberapa operasi matematika standar pada dua set A dan B. Bagian berwarna merah pada setiap diagram Venn adalah set hasil dari operasi set tertentu.

Metode Operasi Set

Python set memiliki metode yang memungkinkan Anda melakukan operasi matematika ini serta operator yang memberikan hasil yang setara.

Sebelum mengeksplorasi metode-metode ini, mari mulai dengan menginisialisasi dua set dataScientist dan dataEngineer.

dataScientist = set(['Python', 'R', 'SQL', 'Git', 'Tableau', 'SAS'])
dataEngineer = set(['Python', 'Java', 'Scala', 'Git', 'SQL', 'Hadoop'])

union

Union, dinotasikan dataScientist ∪ dataEngineer, adalah set dari semua nilai yang merupakan nilai dari dataScientist, atau dataEngineer, atau keduanya. Anda dapat menggunakan metode union untuk mengetahui semua nilai unik dalam dua set.

# set built-in function union
dataScientist.union(dataEngineer)

# Equivalent Result
dataScientist | dataEngineer

Set yang dikembalikan dari union dapat divisualisasikan sebagai bagian merah dari diagram Venn di bawah.

Metode Operasi Set

intersection

Intersection dari dua set dataScientist dan dataEngineer, dinotasikan dataScientist ∩ dataEngineer, adalah set dari semua nilai yang merupakan nilai dari kedua set tersebut.

# Intersection operation
dataScientist.intersection(dataEngineer)

# Equivalent Result
dataScientist & dataEngineer

intersection

Set yang dikembalikan dari intersection dapat divisualisasikan sebagai bagian merah dari diagram Venn di bawah.

intersection

Anda mungkin menemukan kasus di mana Anda ingin memastikan bahwa dua set tidak memiliki nilai yang sama sekali. Dengan kata lain, Anda menginginkan dua set yang intersection-nya kosong. Dua set ini disebut disjoint set. Anda dapat menguji disjoint set dengan menggunakan metode isdisjoint.

# Initialize a set
graphicDesigner = {'Illustrator', 'InDesign', 'Photoshop'}

# These sets have elements in common so it would return False
dataScientist.isdisjoint(dataEngineer)

# These sets have no elements in common so it would return True
dataScientist.isdisjoint(graphicDesigner)

intersection

Anda dapat melihat pada intersection yang ditunjukkan di diagram Venn di bawah bahwa disjoint set dataScientist dan graphicDesigner tidak memiliki nilai yang sama sekali.

intersection

Difference

Difference dari dua set dataScientist dan dataEngineer, dinotasikan dataScientist \ dataEngineer, adalah set dari semua nilai dataScientist yang bukan merupakan nilai dataEngineer.

# Difference Operation
dataScientist.difference(dataEngineer)

# Equivalent Result
dataScientist - dataEngineer

difference

Set yang dikembalikan dari difference dapat divisualisasikan sebagai bagian merah dari diagram Venn di bawah.

difference

Symmetric Difference

Symmetric difference dari dua set dataScientist dan dataEngineer, dinotasikan dataScientist △ dataEngineer, adalah set dari semua nilai yang merupakan nilai tepat salah satu dari dua set tersebut, tetapi bukan keduanya.

# Symmetric Difference Operation
dataScientist.symmetric_difference(dataEngineer)

# Equivalent Result
dataScientist ^ dataEngineer

symmetric_difference

Set yang dikembalikan dari symmetric difference dapat divisualisasikan sebagai bagian merah dari diagram Venn di bawah.

symmetric_difference

Set Comprehension

Anda mungkin sebelumnya telah mempelajari tentang list comprehension, dictionary comprehension, dan generator comprehension. Ada juga set comprehension di Python. Set comprehension sangat mirip. Set comprehension di Python dapat dibuat sebagai berikut:

{skill for skill in ['SQL', 'SQL', 'PYTHON', 'PYTHON']}

Set Comprehension

Output di atas adalah set berisi 2 nilai karena set tidak dapat memiliki kemunculan elemen yang sama lebih dari sekali.

Gagasan di balik penggunaan set comprehension adalah agar Anda dapat menulis dan menalar dalam kode dengan cara yang sama seperti Anda melakukan matematika secara manual.

{skill for skill in ['GIT', 'PYTHON', 'SQL'] if skill not in {'GIT', 'PYTHON', 'JAVA'}}
 

Kode di atas mirip dengan difference pada set yang telah Anda pelajari sebelumnya. Hanya saja tampilannya sedikit berbeda.

Uji Keanggotaan (Membership Tests)

Uji keanggotaan memeriksa apakah elemen tertentu terdapat dalam suatu urutan, seperti string, list, tuple, atau set. Salah satu keunggulan utama menggunakan set di Python adalah set sangat dioptimalkan untuk uji keanggotaan. Misalnya, set melakukan uji keanggotaan jauh lebih efisien daripada list. Jika Anda berlatar belakang ilmu komputer, ini karena kompleksitas waktu rata-rata uji keanggotaan pada set adalah O(1) dibandingkan O(n) untuk list.

Kode di bawah ini menunjukkan uji keanggotaan menggunakan list.

# Initialize a list
possibleList = ['Python', 'R', 'SQL', 'Git', 'Tableau', 'SAS', 'Java', 'Spark', 'Scala']

# Membership test
'Python' in possibleList

Uji Keanggotaan

Hal serupa dapat dilakukan untuk set. Set kebetulan lebih efisien.

# Initialize a set
possibleSet = {'Python', 'R', 'SQL', 'Git', 'Tableau', 'SAS', 'Java', 'Spark', 'Scala'}

# Membership test
'Python' in possibleSet

Uji Keanggotaan

Karena possibleSet adalah set dan nilai 'Python' merupakan nilai dari possibleSet, ini dapat dinotasikan sebagai 'Python' ∈ possibleSet.

Jika Anda memiliki nilai yang bukan bagian dari set, seperti 'Fortran', ini akan dinotasikan sebagai 'Fortran' ∉ possibleSet.

Subset

Penerapan praktis dari pemahaman keanggotaan adalah subset.

Pertama-tama mari inisialisasi dua set.

possibleSkills = {'Python', 'R', 'SQL', 'Git', 'Tableau', 'SAS'}
mySkills = {'Python', 'R'}
 

Jika setiap nilai dari set mySkills juga merupakan nilai dari set possibleSkills, maka mySkills dikatakan sebagai subset dari possibleSkills, yang secara matematis ditulis mySkills ⊆ possibleSkills.

Anda dapat memeriksa apakah satu set merupakan subset dari set lain menggunakan metode issubset.

mySkills.issubset(possibleSkills)

Subset

Karena metode ini mengembalikan True pada kasus ini, maka ia adalah subset. Pada diagram Venn di bawah, perhatikan bahwa setiap nilai dari set mySkills juga merupakan nilai dari set possibleSkills.

Subset

Frozenset

Anda mungkin pernah menemui list dan tuple bertingkat (nested).

# Nested Lists and Tuples
nestedLists = [['the', 12], ['to', 11], ['of', 9], ['and', 7], ['that', 6]]
nestedTuples = (('the', 12), ('to', 11), ('of', 9), ('and', 7), ('that', 6))

Frozensets

Masalah dengan set bertingkat adalah Anda biasanya tidak dapat memiliki set bertingkat di Python, karena set tidak dapat berisi nilai yang mutable, termasuk set.

Frozensets

Ini adalah salah satu situasi di mana Anda mungkin ingin menggunakan frozenset. Frozenset sangat mirip dengan set kecuali bahwa frozenset bersifat immutable.

Anda membuat frozenset dengan menggunakan frozenset().

# Initialize a frozenset
immutableSet = frozenset()

Frozensets

Anda dapat membuat set bertingkat jika Anda memanfaatkan frozenset seperti pada kode di bawah.

nestedSets = set([frozenset()])

Frozensets

Penting untuk diingat bahwa kelemahan utama frozenset adalah karena bersifat immutable, artinya Anda tidak dapat menambah atau menghapus nilai.

Kesimpulan

Python set sangat berguna untuk menghapus nilai duplikat dari koleksi seperti list secara efisien dan untuk melakukan operasi matematika umum seperti union dan intersection. Beberapa tantangan yang sering dihadapi orang adalah kapan harus menggunakan berbagai tipe data. Misalnya, jika Anda merasa belum yakin kapan lebih menguntungkan menggunakan dictionary dibandingkan set, saya mendorong Anda untuk mencoba mode latihan harian DataCamp. Jika Anda memiliki pertanyaan atau pemikiran tentang tutorial ini, jangan ragu untuk menyampaikannya di komentar di bawah atau melalui Twitter.

Topik

Terkait

blogs

Tutorial Korelasi di R

blogs

Spaghetti Plot dan Jalur Badai

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026