Jalankan dan edit kode dari Tutorial ini secara online
Jalankan kode
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'}

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.

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')

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'])

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')

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

Opsi 2: Anda dapat menggunakan metode discard untuk menghapus nilai dari set.
graphicDesigner.discard('Premiere')

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()

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()

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)

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)

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))

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

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))

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.

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.

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

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

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)

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

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

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

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

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

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']}

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

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

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)

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.

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))

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

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()

Anda dapat membuat set bertingkat jika Anda memanfaatkan frozenset seperti pada kode di bawah.
nestedSets = set([frozenset()])

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.

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().
Untuk menginisialisasi set dengan nilai, Anda dapat meneruskan list ke set().