Menu

Python Set'leri: Benzersiz Elemanlar, Birleşim, Kesişim ve Fark

Python set'ine ne zaman uzanmalı — teklik, hızlı in kontrolleri ve set'leri güçlü kılan matematik tarzı işlemler (birleşim, kesişim, fark).

Set, Benzersiz Elemanların Sırasız Bir Torbasıdır

Listeler ve tuple'lar sırayı umursarken set'ler umursamaz. Listeler yinelenenlerin birikmesine izin verirken set'ler onları sessizce atar. İki belirli ihtiyacın olduğunda doğru veri yapısı set'tir:

  1. Benzersiz elemanlar istiyorsun, nokta.
  2. Üyeliği hızlı kontrol etmek istiyorsun.

Bir tanesini süslü parantezlerle yaz:

main.py
Output
Click Run to see the output here.

İkinci set'teki yinelenen "red" ve "green" basitçe kaybolur. Bu bir hata değil — işin özü bu.

Set Oluşturmak

Aslında kullanacağın iki yol:

main.py
Output
Click Run to see the output here.

Son nokta herkesi bir kez yakalar: {} boş bir sözlük oluşturur, boş bir set değil. Söz dizimsel belirsizliğin birine düşmesi gerekiyordu ve dict'ler kazandı.

Ekleme ve Kaldırma

main.py
Output
Click Run to see the output here.

remove ile discard arasındaki temel fark: remove elemanın var olmasında ısrarcıdır; discard umursamaz. Elemanın yokluğunun bir hata olup olmadığına göre seç.

Hızlı Üyelik

Set'lerin yerini asıl burada kazandığı yer. x in some_set sabit zamanda çalışır, set ne kadar büyük olursa olsun. x in some_list ise listede dolaşmak zorundadır ve liste büyüdükçe yavaşlar.

main.py
Output
Click Run to see the output here.

Genel kural: bir döngü içinde if x in some_list yazdığını fark ettiğinde ve liste birkaç düzineden fazla eleman içeriyorsa, önce listeyi bir set'e dönüştür.

Set Matematiği

Set'lerin gerçekten eğlenceli hâle geldiği yer burası. Onları matematiksel set işlemlerini yansıtan operatörlerle birleştirebilirsin:

main.py
Output
Click Run to see the output here.

Her operatörün bir metot hâli de var (.union(), .intersection(), .difference(), .symmetric_difference()). Operatörler daha kompakt; metot biçimleri başka bir set dışında herhangi bir iterable kabul eder.

Bir Listeden Yinelenenleri Kaldırmak

Set'lerin en yaygın kullanımlarından biri, "set mantığı"nın dışında bile:

main.py
Output
Click Run to see the output here.

Tek satır, yinelenenler yok oldu. Dikkat edilmesi gereken bir şey: sıra korunmaz. Hem teklik hem de orijinal sıra istiyorsan, onun yerine dict.fromkeys() kullan:

main.py
Output
Click Run to see the output here.

Modern Python'da dict'ler eklenme sırasını korur ve dict.fromkeys iterable'ın elemanlarını anahtar olarak kullanarak bir dict inşa eder — etkili biçimde sıralı bir set.

Alt Küme ve Üst Küme

Bir set'in bir diğerinin içinde olup olmadığını kontrol etmek:

main.py
Output
Click Run to see the output here.

Bunlar izin kontrolleri gibi şeylerde karşına çıkar ("bu kullanıcının tüm gerekli rolleri var mı?").

Bir Set'e Neler Girebilir

Yalnızca hashlenebilir öğeler. Bu teknik bir terim — pratikte şu demek:

  • Değişmez şeyler hashlenebilir: sayılar, stringler, hashlenebilir elemanlardan oluşan tuple'lar, frozenset'ler.
  • Değiştirilebilir şeyler değildir: listeler, dict'ler, diğer set'ler set üyesi olamaz.
main.py
Output
Click Run to see the output here.

Set'lerden oluşan bir set istiyorsan frozenset kullan — set'in değişmez bir sürümüdür.

İterasyon Sırasızdır

Bir set üzerinde döngü kurmak, sana garantili bir sıra olmadan elemanları verir:

main.py
Output
Click Run to see the output here.

Bunu birkaç kez çalıştır; sıranın değiştiğini göreceksin. Sıra önemliyse, set doğru yapı değildir — ihtiyacın olduğunda içeriği sırala ya da bir liste kullan.

Set Ne Zaman Kullanılmaz

Şu koşullardan biri doğruysa, liste ya da dict muhtemelen daha iyi uyar:

  • Sırayı önemsiyorsan.
  • Yinelenenleri saklaman gerekiyorsa.
  • Her elemanın ilişkili verisi varsa (elemanı anahtar olarak alan bir dict kullan).

Devam

Set'ler teklik ve üyeliği halleder. Sözlükler — sırada — daha geniş "bir anahtarla bir değeri ara" kalıbını halleder; bu da Python'daki en kullanışlı liste dışı veri yapısıdır.

Sıkça Sorulan Sorular

Python set'i nedir?

Set, benzersiz elemanlardan oluşan sırasız bir koleksiyondur. Set'ler, anahtar-değer çiftleri olmadan süslü parantezler kullanır: colors = {'red', 'green', 'blue'}. Aynı değeri iki kez eklemenin hiçbir etkisi yoktur — yinelenenler sessizce atılır.

Liste yerine ne zaman set kullanmalıyım?

Teklik önemliyse ya da çok sayıda üyelik kontrolü (x in collection) yapacaksan set kullan. Set'ler yinelenenleri otomatik olarak kaldırır ve üyeliği sabit zamanda kontrol eder; bu da büyük koleksiyonlarda listelere göre büyük bir hız kazanımıdır.

Python'da boş set'i nasıl oluştururum?

{} değil, set() kullan — içi boş süslü parantezler boş bir set değil, boş bir sözlük oluşturur. Bir set elinde olduktan sonra .add(value) ile eleman ekleyebilirsin.

Coddy ile kodlamayı öğren

BAŞLA