Python Set Anlaşmaları: Bunları nasıl ve ne zaman kullanmalı
Python Set Anlaşmaları, kodunuzdaki setler oluşturmak ve manipüle etmek için öz bir yol sağlar. Kodunuzu daha okunabilir ve pythonic hale getirerek temiz bir sözdizimi ile kümeler oluştururlar. Ayrılmış anlaşmalarla, Python programlama araç setinize eklemek için harika beceriler olan setler oluşturabilirsiniz, dönüştürebilirsiniz ve filtre oluşturabilirsiniz.
Bu eğitimin sonunda şunu anlayacaksınız:
- Python'da kısa bir sözdizimine sahip kümeler oluşturmanıza olanak tanıyan ayar kavramaları vardır.
- Python'un dört tür Anlaşmalara sahiptir: liste , set , sözlük ve jeneratör ifadeler.
- Bir küme anlama
{ifade için yinelenebilir [if koşulu]
şeklinde yazılabilir. - Setler, tüm öğelerinin benzersiz olmasını sağladıkları için kopyalar içeremez.
Bu eğitimden en iyi şekilde yararlanmak için for
döngüleri, yinelenebilirler, liste anlamaları ve sözlük anlamaları gibi temel Python kavramlarına aşina olmanız gerekir.
Python'da setler oluşturmak ve dönüştürmek
Python programlamada kümeler oluşturmanız, doldurmanız ve dönüştürmeniz gerekebilir. Bunu yapmak için set değişmez değerlerini, set()
yapıcısını ve for
döngülerini kullanabilirsiniz. Aşağıdaki bölümlerde bu araçların nasıl kullanılacağına hızlıca göz atacaksınız. Ayrıca Python'da kümeleri işlemenin güçlü bir yolu olan küme kavramalarını da öğreneceksiniz.
Değişmez Değerler ve set()
ile Kümeler Oluşturma
Yeni kümeler oluşturmak için değişmez değerleri kullanabilirsiniz. Küme değişmezi küme parantezleri içine alınmış bir dizi öğedir. Bir set değişmezinin sözdizimi aşağıda gösterilmiştir:
{element_1, element_2,..., element_N}
Elemanlar karma nesneler olmalıdır. Değişiklikteki nesneler kopyalanabilir, ancak sonuçta ortaya çıkan kümede yalnızca bir örnek saklanır. Setler yinelenen öğelere izin vermez. İşte bir setin hızlı bir örneği:
>>> colors = {"blue", "red", "green", "orange", "green"}
>>> colors
{'red', 'green', 'orange', 'blue'}
>>> colors.add("purple")
>>> colors
{'red', 'green', 'orange', 'purple', 'blue'}
Bu örnekte, renk adları içeren bir küme oluşturursunuz. Ortaya çıkan kümenizdeki öğeler benzersiz dize nesneleridir. .add()
yöntemini kullanarak yeni öğeler ekleyebilirsiniz. Setlerin sıralanmamış koleksiyonlar olduğunu unutmayın, bu nedenle ortaya çıkan setteki elemanların sırası çoğu durumda ekleme sırasına uymaz.
Not: Kümeler hakkında daha fazla bilgi edinmek için Python'daki Kümeler eğitimine göz atın.
Ayrıca set()
yapıcısını ve yinelenebilir nesneleri kullanarak yeni bir küme oluşturabilirsiniz:
>>> numbers = [2, 2, 1, 4, 2, 3]
>>> set(numbers)
{1, 2, 3, 4}
Bu örnekte, sayısal değerler listesiyle birlikte set()
'i kullanarak yeni bir küme yaratacaksınız. Ortaya çıkan kümenin yinelenen öğeler içermediğine dikkat edin. Uygulamada, set()
yapıcısı yinelenebilir değerlerdeki yinelenen değerleri ortadan kaldırmak için harika bir araçtır.
Boş bir küme oluşturmak için bağımsız değişkenler olmadan set()
yapıcısını kullanırsınız:
>>> set()
set()
Bir çift kıvırcık parantezi {}
bir çift kıvırcık parantez ile boş bir set oluşturamazsınız. Boş bir set oluşturmak için set()
yapıcısını kullanmanız gerekir.
Setleri doldurmak için döngüleri için kullanma
Bazen, boş bir setle başlamanız ve öğelerle dinamik olarak doldurmanız gerekir. Bunu yapmak için döngü için bir kullanabilirsiniz. Örneğin, bir metinden bir dizi benzersiz kelime oluşturmak istediğinizi söyleyin. Bunu bir döngü ile nasıl yapacağınız aşağıda açıklanmıştır:
>>> unique_words = set()
>>> text = """
... Beautiful is better than ugly
... Explicit is better than implicit
... Simple is better than complex
... Complex is better than complicated
... """.lower()
>>> for word in text.split():
... unique_words.add(word)
...
>>> unique_words
{
'beautiful',
'ugly',
'better',
'implicit',
'complicated',
'than',
'explicit',
'is',
'complex',
'simple'
}
Bu örnekte ilk önce set()
'i kullanarak boş bir küme yaratacaksınız. Kelime ayıklamayı büyük/küçük harfe duyarsız hale getirmek için .lower()
yöntemini kullanarak metne küçük harf uygularsınız. Daha sonra metinden çıkarılan kelimelerin listesi üzerinde bir döngü çalıştırırsınız.
Hızlı bir yaklaşım olarak, ayırıcı olarak boşluk karakterini kullanarak metni tek tek kelimelere bölmek için .split()
yöntemini kullandınız.
Not: Bu örnekte kullanılan metin, Python'un tasarım felsefesini destekleyen bir dizi prensip olan Python Zen'inin bir parçasıdır.
Döngü, her yinelemede sete bir kelime eklemeye çalışır. Ancak, bir kelime zaten kümede ise, yeni bir örnek eklenmez. Bu nedenle ortaya çıkan setin yalnızca bir örneği daha iyi
örneği vardır. Döngü okunabilir ve nettir, ancak kodunuzu daha da kısa hale getirmek için belirli bir anlama kullanabilirsiniz.
Set Kavrama Tanıtımı
Set Anlaşılması, döngü için tek satır
İşte belirli bir anlama için sözdizimi:
{expression for member in iterable [if condition]}
Bir küme anlama yeni bir küme döndürür. Bu kümeyi oluşturmak için yinelenebilir bir girdinin öğelerinden öğeleri hesaplarsınız. Sözdiziminin sonunda, mevcut koleksiyonları filtrelemek veya koşullu olarak öğeler oluşturmak için kullanabileceğiniz isteğe bağlı bir koşul bulunur.
Küme anlama sözdizimi dört temel öğeden oluşur:
- İç parantez: Küme anlamalarını tanımlamak için küme parantezleri (
{
) kullanılır. - Anlama İfadesi: Her yinelemede bir element sağlayan bir ifade.
- Geçerli
üye
: Bu, yinelenebilir öğenin veya değerin adıdır. Yinelenebilir
: Bu, liste, tuple, set, oluşturucu veya benzer türler dahil olmak üzere yinelenebilir herhangi bir Python nesnesi olabilir.
Aşağıdaki kod, bir anlama kullanarak bir dizi benzersiz kelime oluşturabileceğinizi göstermektedir:
>>> text = """
... Beautiful is better than ugly
... Explicit is better than implicit
... Simple is better than complex
... Complex is better than complicated
... """.lower()
>>> {word for word in text.split()}
{
'beautiful',
'ugly',
'better',
'implicit',
'complicated',
'than',
'explicit',
'is',
'complex',
'simple'
}
Bu örnekte, orijinal metinden benzersiz kelimeleri çıkarmak için belirli bir anlama kullanırsınız. Sözdizimi özlü ve nettir, kodunuzun okunabilirliğini geliştirir.
Uygulamada, kümenizin öğelerini oluşturmak için verileri dönüştürmeniz gerekmediğinde, önceki bölümdeki döngüyü ve yukarıdaki anlayışı aşağıdaki kodla değiştirebilirsiniz:
>>> set(text.split())
{
'beautiful',
'ugly',
'better',
'implicit',
'complicated',
'than',
'explicit',
'is',
'complex',
'simple'
}
Bu örnekte, bölünmüş metni doğrudan set()
yapıcısına aktarır ve döngü veya kavrayışla aynı sonucu alırsınız. Bunu yapabilirsiniz, çünkü ayarlanan öğelerin bir dönüşümden geçmesi gerekmez.
Kavramalar birden fazla for
cümleciği de içerebilir. Bunu yaptıklarında, en soldaki for
dış koleksiyon üzerinde yinelenir, soldan sağa sonraki for
ilk iç içe geçme düzeyi üzerinde yinelenir ve bu şekilde devam eder.
Açıklamak için, bir liste listeniz olduğunu söyleyin. Her iç içe liste sayıları içerir ve kare değerleriyle bir set oluşturmak istersiniz. Bunu yapmak için, aşağıda gösterildiği gibi maddeleri için iki ile bir anlama kullanabilirsiniz:
>>> matrix = [
... [9, 3, 8, 3],
... [4, 5, 2, 8],
... [6, 4, 3, 1],
... [1, 0, 4, 5],
... ]
>>> {value**2 for row in matrix for value in row}
{64, 1, 0, 4, 36, 9, 16, 81, 25}
Bu örnekte, for Loop için ilk , matrisinizin satırları üzerinde yinelenir.
için ikinci döngü, her satırdaki sayı üzerinde yinelenir. Sonuç olarak, bir dizi kare değer elde edersiniz.
Bu örnekte, 16 element sahibi olmak yerine sadece dokuz ile sonuçlandığınızı belirtmek önemlidir. Bunun nedeni, set öğelerinin benzersiz olmasıdır. Bir öğe kopyalandığında, son sete yeni örnek eklenmez.
Python'da Küme Kavramalarından Yararlanma
Küme kavramalarıyla yeni kümeler oluşturabilir, mevcut kümeleri dönüştürebilir ve hatta koşul cümlelerini kullanarak öğeleri filtreleyebilirsiniz. Aşağıdaki bölümlerde bu kullanım senaryolarına yaklaşmak için küme kavramayı nasıl kullanacağınızı öğreneceksiniz.
Başlangıç olarak, mevcut iterables'ten yeni setler oluşturmak için kapsamları nasıl kullanacağınızı öğreneceksiniz.
Iterables'dan set oluşturma
Bazen yinelenebilir bir veriye sahip olursunuz ve bazı veri dönüştürme yoluyla öğeleri oluşturmak için veri öğelerini kullanarak bir küme oluşturmak istersiniz.
Örneğin, bir araç ve kütüphane listeniz olduğunu varsayalım. Belirli bir aracın listede olup olmadığını sürekli olarak kontrol etmeniz gerekir. Bunu yapmak için üyelik testleri kullanırsınız. Ayrıca kod kasanızı duyarsız hale getirmeniz gerekir, böylece tüm kelimeleri küçük harflere dönüştürmeye karar verirsiniz.
Setler üyelik testlerindeki listelerden daha verimlidir. Bu nedenle, araç listenizi bir dizi küçük kelimeye dönüştürmeye de karar verirsiniz:
>>> tools = ["Python", "Django", "Flask", "pandas", "NumPy"]
>>> tools_set = {tool.lower() for tool in tools}
>>> tools_set
{'django', 'numpy', 'flask', 'pandas', 'python'}
>>> "python".lower() in tools_set
True
>>> "Pandas".lower() in tools_set
True
>>> "Numpy".lower() in tools_set
True
Vurgulanan satırda, tutarlı karşılaştırmalar sağlamak için tüm değerleri küçük harfe normalleştirirken belirli bir anlama kullanırsınız. Ardından, üyelik testlerini çalıştırmak ve belirli bir aracın orijinal listenizde olup olmadığını belirlemek için operatöründe kullanırsınız.
Yinelenebilir girişin öğelerine herhangi bir veri dönüşümü uygulamanız gerekmiyorsa, o zaman bir set anlama kullanmanıza gerek yoktur. Bunun yerine set(iterable)
komutunu kullanabilirsiniz. Yukarıdaki örnekte dönüşüm, araç adlarının küçük harfe çevrilmesinden ibarettir.
Mevcut setleri dönüştürmek
Mevcut kümeleri hızla dönüştürmek için küme kavramalarını da kullanabilirsiniz. Kullanıcı tarafından girilen bir dizi e-posta adresiniz olduğunu varsayalım. Bazı adreslerin başında ve sonunda boşlukların yanı sıra büyük harfler de bulunduğunu fark ettiniz ve bunu düzeltmek istiyorsunuz. Daha da önemlisi, yinelenen bir e-posta adresi olduğunu fark ettiniz.
Bunu bir kavrayışla temizlemeye karar verirsiniz:
>>> emails = {
... " alice@example.org ",
... "BOB@example.com",
... "charlie@EXAMPLE.com",
... "David@example.net",
... " bob@example.com",
... "JohnDoe@example.com",
... }
>>> {email.strip().lower() for email in emails}
{
'alice@example.org',
'bob@example.com',
'johndoe@example.com',
'charlie@example.com',
'david@example.net'
}
Vurgulanan satırda, .strip()
yöntemini kullanarak her adresin başındaki ve sonundaki boşlukları kaldıran bir set anlayışınız var. Daha sonra .lower()
kullanarak tüm adreslere küçük harf uygular. Temizleme sonucunda, kümeler yalnızca benzersiz öğeler içerebildiği için yinelenen adresler ortadan kaldırılır.
Setlerden Öğeleri Filtreleme
Bazen mevcut bir kümeyi filtrelemeniz ve belirli bir gereksinimi veya koşulu karşılayan öğelerle yeni bir küme oluşturmanız gerekir. Örneğin, yalnızca .com
e-postalarını çıkaracak şekilde ayarlanmış e-posta adreslerinizi filtrelemek istediğinizi varsayalım. Bunu yapmak için aşağıdaki anlayışı kullanabilirsiniz:
>>> emails_set = {
... "alice@example.org",
... "bob@example.com",
... "johndoe@example.com",
... "charlie@example.com",
... "david@example.net",
... }
>>> {email for email in emails_set if email.endswith(".com")}
{'bob@example.com', 'charlie@example.com', 'johndoe@example.com'}
Bu örnekte, yalnızca .com
etki alanındaki e-posta adreslerini içeren bir küme oluşturmak için bir koşul kullanıyorsunuz.
Set Anlaşmaları Ne Zaman Kullanılacağına Karar Verme
Normal bir döngü veya işlev çağrılarının birleşimi yerine küme anlamanın kullanılıp kullanılmayacağına karar verirken aşağıdaki faktörleri göz önünde bulundurmalısınız:
- özet : SET KULLANIMLARI döngüleri için eşdeğer
ile karşılaştırıldığında kod miktarını azaltın.
- okunabilirlik : Set kapsamları kodunuzu daha açık ve okunabilir hale getirebilir.
Uygulamada, aşağıdaki işlemleri gerçekleştirmeniz gerektiğinde SET kapsamlarını kullanabilirsiniz:
- Veri dönüşümlerini uygulayarak mevcut iterabllardan setler oluşturun
- Mevcut bir setin öğelerini dönüştürün
- Mevcut bir kümenin öğelerini filtreleme
Şu ana kadar tüm bu işlemleri küme kavramalarını kullanarak nasıl yapacağınızı öğrendiniz. Yine de Python kodlama deneyiminiz sırasında belirli kavramalar için başka iyi kullanım durumları bulabilirsiniz.
Ek olarak, küme anlamalarını kullanmanın gerekli olmayabileceği durumlar da vardır. Örneğin, yinelenen öğelerden yinelenen öğeleri kaldırmanız gerekiyorsa, aşağıdaki sözdizimini kullanabilirsiniz:
>>> set([2, 2, 1, 4, 2, 3])
{1, 2, 3, 4}
Set öğelerini oluşturmak için giriş verilerini dönüştürmeniz gerekmiyorsa, yalnızca set()
yapıcısını kullanabilirsiniz. Bu, yinelenen öğeleri yinelenebilir bir öğeden kaldırmanın harika bir yoludur. Ancak yinelenebilir girdideki nesnelerin hashable olması gerektiğini ve öğelerin orijinal sırasının korunmayacağını unutmamak önemlidir.
Ortak Kötü Uygulamaları Keşfetmek
Python kodunuzda belirli kavramalarla çalışırken kaçınmak isteyeceğiniz birkaç kötü uygulama vardır. En yaygın olanlardan bazıları şunlardır:
- karmaşık ifadeleri kullanma
- maddeleri veya koşullar için birkaç ile iç içe kavrayışlar yazma
- Anlama değişkenlerine dışarıdan erişmeye çalışmak
- Ayar öğelerini oluştururken pahalı dönüşümler
Bazen anlama ifadesinin çok karmaşık olduğu bir anlama setine sahip olabilirsiniz.
Örneğin, bir sayı listesinden bir küme oluşturduğunuzu varsayalım. Sayı çiftse, karesini istersiniz. Aksi takdirde küpünü istersiniz. Bunu yapmak için aşağıdaki anlayışı kullanabilirsiniz:
>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> {number**2 if number % 2 == 0 else number**3 for number in numbers}
{64, 1, 4, 36, 100, 16, 343, 729, 27, 125}
Bu anlayışta, küme elemanlarını oluşturmak için nispeten karmaşık bir ifade kullanırsınız. Bu anlayışı okumak ve ne işe yaradığını deşifre etmek zor olabilir. Karmaşık bir ifade kodunuzun okunmasını zorlaştırıyorsa, bunun yerine normal bir for
döngüsü kullanmaktan yararlanabilirsiniz:
>>> result_set = set()
>>> for number in numbers:
... if number % 2 == 0:
... value = number**2
... else:
... value = number**3
... result_set.add(value)
...
>>> result_set
{64, 1, 4, 36, 100, 16, 343, 729, 27, 125}
Bu döngü, kavrayışla aynı sonucu üretir, ancak daha açık olabilir ve kodunuzu daha okunabilir hale getirir.
Madde veya koşullar için birkaç ile iç içe kavrayışlar kodunuzu daha az okunabilir hale getirebilir. Bu nedenle, genellikle onlardan kaçınmalı ve normal bir döngü gibi daha okunabilir yapılar kullanmalısınız.
Bir kavramada tanımladığınız değişkenleri, idrakin dışında kullanmaya çalışmak mümkün değildir:
>>> {number**3 for number in range(1, 11)}
{64, 1, 512, 8, 1000, 343, 216, 729, 27, 125}
>>> number
Traceback (most recent call last):
...
NameError: name 'number' is not defined
numarası
değişkeni yalnızca anlama içinde görülebilir. Anlama dışında kullanmaya çalışırsanız, bir nameError
istisnası alırsınız.
Bazen, ayarlanmış anlaşmalarla çalışırken, ayar öğeleri oluşturmak için pahalı veri dönüşümleri çalıştırmanız gerekebilir. Bu durumlarda, son seti oluşturmanın önemli zaman alabileceğinin farkında olmalısınız. Olası bir çözüm, talep üzerine unsurları üreten bir jeneratör kullanmaktır.
Çözüm
Python'un kavramalarını ayrıntılı olarak öğrendiniz. Kısa ve net bir sözdizimi kullanarak kümeler oluşturmak, dönüştürmek ve filtrelemek için güçlü bir araçtır. Ayrıca belirli kavramalarla çalışırken kaçınmanız gereken bazı kötü uygulamaları da öğrendiniz.
Set Anlaşmaları, Python geliştiricileri için mükemmel bir araçtır. Python'daki setleri manipüle etmek için pitonik ve aerodinamik bir yol sağlarlar.
Bu öğreticide:
- oluşturulan Kısa bir sözdizimine sahip yeni setler
- Mevcut kümeler anlayışlarla dönüştürüldü
- Filtrelenmiş Mevcut setlerden istenmeyen öğeler
- Karar verdim Kodunuzda ayarlanan kavrayışları ne zaman kullanmalısınız?
Bu becerilerle süreç kümelerine daha okunabilir ve Pythonic kod yazabilirsiniz. Belirli kavramaları kullanmaya devam ettikçe bunların paha biçilmez bir araç olduğunu göreceksiniz.
Sık sorulan sorular
Artık Python'daki belirli kavramalar konusunda biraz deneyiminiz olduğuna göre, anladığınızı kontrol etmek ve öğrendiklerinizi özetlemek için aşağıdaki soruları ve cevapları kullanabilirsiniz.
Bu SSS'ler, bu eğitimde ele aldığınız en önemli kavramlarla ilgilidir. Cevabı ortaya çıkarmak için her sorunun yanındaki Göster/Gizle geçiş düğmesini tıklayın:
Küme kavrama, Python'da liste kavramaya benzer bir sözdizimi kullanarak kümeler oluşturmanın kısa bir yoludur. Temel fark, küme anlamanın süslü parantezleri {
kullanması, liste anlamanın ise köşeli parantezleri []
kullanmasıdır. Sonuç, benzersiz öğelerin sırasız bir koleksiyonu olan bir kümedir.
Set anlama sözdizimini kullanarak bir set oluşturabilirsiniz: {yinelenebilir üye için ifade}
. Bu, yinelenebilir olan her üyenin ifadesini değerlendirecek ve sonucu sete ekleyerek tüm öğelerin benzersiz olmasını sağlayacaktır.
Kısa ve öz kümeler oluşturmak ve kodun okunabilirliğini geliştirmek istediğinizde, düzenli döngüler üzerinde küme kavramalarını kullanmayı düşünmelisiniz. Benzersiz küme öğeleri oluşturmak için yinelenebilir bir veriden verileri dönüştürürken veya filtrelerken özellikle kullanışlıdırlar.
Yaygın kötü uygulamalar arasında kavramalar içinde aşırı derecede karmaşık ifadeler kullanmak, birden çok for
cümleciği veya koşul cümlesi ile iç içe kavramalar yazmak, kavrama dışındaki kavrama değişkenlerine erişmeye çalışmak ve performansı düşürebilecek maliyetli dönüşümler gerçekleştirmek yer alır.
Evet, anlamanın sonuna bir koşul ekleyerek öğeleri filtrelemek için küme kavramalarını kullanabilirsiniz: {ifade için üyenin yinelenebilir if koşulunda
. Bu yalnızca koşulun Doğru
olarak değerlendirildiği öğeleri içerecektir.