Python'da Veri Yapıları ve Algoritmaları: Bu kitap, veri yapıları ve algoritmalar konusunda kapsamlı bir giriş sunuyor Bu konu, Python programlama dilinin temellerini öğretenler için gerekli bir öğrenme aracıdır Kitap, okuyucunun temel bilgileri anlamasına yardımcı olacak ilginç örnekler içermektedir

Python, günümüzde oldukça popüler ve sık tercih edilen bir programlama dilidir. Python kullanıcıları, verileri işlemek, analiz etmek, düzenlemek ve yönetmek için birçok farklı veri yapısı ve algoritma kullanır.
Bu yazıda, Python'da kullanılan farklı veri yapıları ve algoritmaların nasıl kullanıldığını inceliyoruz. Listeler, sözlükler, demetler ve set veri yapıları hakkında detaylı bilgi edineceksiniz. Ayrıca, sözlüklerde nesneler arası karşılaştırmanın önemi ve anahtar değerlerine göre sıralamanın nasıl yapıldığını öğreneceksiniz.
Bizimle birlikte Python'da verileri yönetmenin keyfini çıkarmaya hazır olun!
Listeler
Python'da kullanılan liste veri yapısı oldukça sık kullanılır ve nesnelerin bir araya gelmesi olan bir veri yapısıdır. Listeler çeşitli nesneleri içerebilir, örneğin, sayılar, harfler, sözcükler, hatta diğer listeler gibi.
Bir liste tanımlamak için, köşeli parantezler içinde virgülle ayrılmış öğeler listesi kullanılır. Örneğin, [1,2,3,4,5] bir liste oluşturur. İçindeki öğelerin farklı türleri olabilir ve herhangi bir sayıda olabilirler.
Listeler, öğe seçimi, dilimleme ve değiştirme gibi işlemler için oldukça yararlıdır. Bir listenin öğelerine, listedeki saklama konumları olan indeks numaraları ile erişilir. Örneğin, myList = [10, 20, 30] listenin ilk öğesi myList[0] ile erişilebilir. Listenin tamamını yazdırmak için print(myList) kullanılabilir.
Listeler üzerinde çeşitli yöntemler ve fonksiyonlar da bulunur. append() yöntemi, bir listenin sonuna yeni bir öğe eklemek için kullanılır. remove() yöntemi ise belirli bir öğeyi listeden siler. sort() yöntemi, listenin öğelerini artan sırada sıralar.
Bir listenin dilimlenmesi, bir alt dizinin oluşturulmasına olanak tanır. Örneğin, myList[1:3] ile, myList listesindeki elemanların ikinci ve üçüncü öğesi alınır. Listenin bütün öğeleri için ise myList[:] kullanılabilir.
Genellikle, bir liste içindeki her öğeyi tek tek işlemek gerekebilir. Bu gibi durumlarda, Python'da for döngüsü kullanarak liste üzerinde gezinebiliriz. Örneğin:
- for i in myList:
- print(i)
Sözlükler
Python'da kullanılan veri yapılarından biri de sözlüklerdir. Sözlükler, anahtar-değer ikilileri şeklinde çalışır ve birden fazla veri tipini saklayabilirler. Bir sözlük oluşturmak için süslü parantezler ({}) kullanılır ve her bir anahtar-değer çifti iki nokta üstüste (:) ile ayrılır.
Örneğin, bir müşteri veritabanını ele alalım. Her müşteri, bir müşteri numarasına sahiptir ve bu müşteri numarasına göre çeşitli bilgiler saklanır. Bu durumda, müşteri numaraları anahtar, müşteri bilgileri ise değer olarak kabul edilir. Bir sözlük kullanarak bu müşteri verilerini tutabiliriz.
```musteri_veritabani = { 1001: {'isim': 'Ahmet', 'soyisim': 'Yılmaz', 'dogum_tarihi': '01/01/1990'}, 1002: {'isim': 'Mehmet', 'soyisim': 'Demir', 'dogum_tarihi': '02/02/1991'}, 1003: {'isim': 'Ayşe', 'soyisim': 'Kara', 'dogum_tarihi': '03/03/1992'},}```
Yukarıdaki örnekte, müşteri_veritabani sözlüğü, üç müşteri verisi içermektedir. Her bir müşteri numarasının, ilgili müşterinin bilgilerini tuttuğuna dikkat edin.
Sözlükler aynı zamanda, anahtar-değer çiftleri üzerinde farklı işlemler de yapabilirler. Örneğin, bir sözlükteki anahtarlar veya değerler için sıralama yapılabilir ya da bir anahtar-değer çifti eklenip çıkartılabilir. Bu özellikler, yazılım geliştirme sırasında oldukça kullanışlıdır.
Örnek olarak, müşteri_veritabani sözlüğüne yeni bir müşteri eklemek için aşağıdaki kod kullanılabilir:
```musteri_veritabani[1004] = {'isim': 'Fatma', 'soyisim': 'Şahin', 'dogum_tarihi': '04/04/1993'}```
Yukarıdaki kodda, sözlüğe yeni bir anahtar-değer çifti eklenerek yeni bir müşteri kaydedilir.
Sözlükler Python'da oldukça sık kullanılan veri yapıları arasındadır ve özellikle büyük projelerde verileri organize etmek için oldukça kullanışlıdır.
Nesneler Arası Karşılaştırma
Python'da sözlük veri yapısının kullanımı hayatımızın birçok yerinde, özellikle de programlama dünyasında sıkça karşımıza çıkar. Sözlük veri yapısı içerisinde anahtar ve değer çiftleri bulunur. Oluşturulan her bir anahtar ve değer çifti birbirinden farklıdır ve indekslenmiş bir liste ile karşılaştırıldığında daha işlevsel bir yapıya sahiptir.
Sözlük veri yapısı içindeki nesneler arasında karşılaştırma yapmak, bu yapıyı kullanmak isteyen herkes için önemli bir noktadır. Nesneler arasında karşılaştırma yapmak için kullanılan temel yöntemler; "==" (eşitlik), "is" (aynı nesne) ve "!=" (farklılık) operatörleridir.
Bununla birlikte sözlük veri yapısında nesneler arasında karşılaştırma yapmak biraz daha karmaşıktır. Sözlüklerin değerleri nesne tipinde olduğu için bu değerleri kıyaslamak için birkaç yöntem kullanılır.
İlk yöntem, "==" (eşitlik) operatörü ile iki değerin doğrudan karşılaştırılmasıdır. Bu yöntem, sadece sözlüklerin aynı nesne mi yoksa farklı bir nesne mi olduğunu belirlemek için kullanılır.
İkinci yöntem ise "is" (aynı nesne) operatörü kullanımıdır. Bu operatör, iki nesne arasında doğrudan kıyaslama yapar ve sonucu doğrudan verir.
Üçüncü yöntem, "hash ()" işlevinin kullanımıdır. Bu yöntem, nesnelerin farklılığına bakarak kıyaslama yapar.
- "==" (eşitlik) operatörü: Sözlüklerin aynı nesne mi yoksa farklı bir nesne mi olduğunu belirlemek için kullanılır.
- "is" (aynı nesne) operatörü: İki nesne arasında doğrudan kıyaslama yapar ve sonucu doğrudan verir.
- "hash()" işlevi: Nesnelerin farklılığına bakarak kıyaslama yapar.
Bu yöntemler, sözlükler içindeki nesnelerin doğrudan karşılaştırılmasında kullanılan en temel kıyaslama yöntemleri arasındadır. Bunların yanında Python programlama dilinde birden fazla kıyaslama yöntemi mevcuttur. Dolayısıyla kullanılması gereken yöntem, kullanılacak nesnenin özelliklerine ve kıyaslamasının yapıldığı nesne özelliklerine göre değişebilir.
Anahtar Değerlerine Göre Sıralama
Python'da sözlük veri yapısı kullanırken, sözlüklerin anahtar değerlerine göre sıralanması oldukça faydalıdır. Bu sayede, sözlüklerdeki verilerin izlenmesi ve işlenmesi daha kolay hale gelir.
Sözlüklerde anahtar değerlerine göre sıralamak için, sorted() fonksiyonu kullanılabilir. Bu fonksiyon, sözlükleri anahtar değerlerine göre sıralarken, dict.items() metodunu kullanarak her bir anahtar-değer çiftini döndürür.
Örnek olarak, aşağıdaki sözlüğü ele alalım:
my_dict = {'oyuncu1': 48, 'oyuncu2': 22, 'oyuncu3': 35}
Anahtar değerlerine göre sıralamak için, aşağıdaki kod kullanılabilir:
sorted_dict = sorted(my_dict.items())
Bu kod çıktısı, anahtar-değer çiftlerinin alfabetik olarak sıralandığı bir listenin döndürülmesidir:
[('oyuncu1', 48), ('oyuncu2', 22), ('oyuncu3', 35)]
Anahtar değerlerine göre sıralama, sözlüğü daha etkili bir şekilde kullanmamızı sağlar. Özellikle büyük sözlüklerde, anahtar değerlerine göre sıralama işlemi verilerin hızlı bir şekilde işlenmesini sağlar.
Unutmayın, sözlüklerin anahtar değerlerine göre sıralanması işlemi, sözlüklerin kendisini değiştirmez; sadece bir liste olarak anahtar-değer çiftlerinin sıralanmasını sağlar. Bu nedenle, herhangi bir değişiklik yapmadan önce, sözlüğün orijinal yedeği yaratılmalıdır.
Değer Atama
Sözlükler, Python programlama dilinde sıklıkla kullanılan veri yapılarından biridir. Sözlüklerde, anahtar-değer ikilileri kullanılarak veriler saklanır. Bu veri yapısı, birçok farklı uygulamada kullanılabilecek esnek bir yapının olmasıyla da dikkat çeker. Sözlüklerde, anahtar ile ilişkili değer çekilebildiği gibi yeni değerler de atanabilir ya da var olan değerler değiştirilebilir.
Değer atama işlemleri, sözlük veri yapısının temel işlevlerinden biridir. Bir sözlükte yeni bir anahtar-değer ikilisi eklemek ya da var olan bir anahtarın değerini değiştirmek oldukça basittir. Sözlüklerde, anahtara [] işareti ile erişilir ve yeni bir değer atamak için yanında "=" işareti kullanılır. Örneğin:
my_dict = {"a": 1, "b": 2, "c": 3}# Yeni bir değer atamamy_dict["d"] = 4# Var olan bir değerin değiştirilmesimy_dict["b"] = 5
Bu kod örneğinde, "my_dict" adlı bir sözlük tanımlanmıştır. Daha sonra, yeni bir anahtar-değer ikilisi eklemek için "d" anahtarına 4 değeri atanırken, "b" anahtarının değeri de 5 olarak değiştirilmiştir.
Ayrıca, sözlüklerde var olmayan bir anahtarın değerine erişilmeye çalışılırsa KeyError hatası da verilebilir. Bu nedenle, yeni bir anahtar tanımlanmadan önce, var olup olmadığının kontrol edilmesi gerekebilir.
Sözlüklerdeki değer atama işlemleri ve değiştirme yöntemleri, Python'daki veri yapılarının kullanımını daha da kolaylaştırır. Bu nedenle, özellikle büyük boyutlu verileri yönetmek için sözlüklerin kullanımı oldukça avantajlıdır.
Sözlük Fonksiyonları
Python'da kullanılan sözlük fonksiyonları, sözlük veri yapısının yönetilmesinde büyük bir kolaylık sağlar. Sözlüklerin içindeki verileri yönetmek, değiştirmek, aramak, eklemek ya da silmek için çeşitli fonksiyonlar bulunmaktadır.
Bunlardan bazıları şunlardır:
- keys() – Sözlükte bulunan anahtarları bir liste olarak döndürür.
- values() – Sözlükte bulunan değerleri bir liste olarak döndürür.
- items() – Sözlükte bulunan tüm öğeleri bir liste olarak döndürür.
- get() – Belirtilen anahtara karşılık gelen değeri döndürür. Anahtar yoksa None değerini döndürür.
- pop() – Belirtilen anahtara karşılık gelen değeri sözlükten siler ve döndürür. Anahtar yoksa KeyError hatası verir.
Yukarıda sıralanan fonksiyonların her biri farklı bir işleve sahiptir ve sözlüklerin kullanım esnekliğini arttırır. Özellikle büyük ölçekli projelerde, sözlükler üzerinde işlem yapmak gerekiyor. Dolayısıyla sözlük fonksiyonlarının kullanımı oldukça önemlidir.
Demete Veri Yapısı
Python'da kullanılan bir diğer veri yapısı ise demet veri yapısıdır. Demet veri yapısı, listelere benzer, ancak temel bir farkı vardır. Listeler değiştirilebilirken, demetler değiştirilemezler. Demetler, parantez içine alınmış elemanlar tarafından oluşturulur.
Demetlerin kullanışlı olduğu birkaç senaryo şunları içerir: verileri değiştiremeyeceğimiz durumlarda, bir nesnenin tekrar kullanılmasını engellememiz gerektiğinde veya bir liste içindeki benzersiz öğeleri çıkarmak istediğimizde.
Bir demetteki öğelerde sıralama ve indeksleme özellikleri listelerle benzerdir. Bir demete öğe eklemek veya çıkarmak mümkün değildir, ancak birleştirme ve kesme işlemleri geçerlidir. Demetler aynı zamanda verilerin değiştirilmediğinden emin olmak istediğimiz durumlarda çok kullanışlıdır.
Demetler, birçok işlevi başarıyla yerine getirmek için kullanılabilir. Bunlar arasında eleman sayısını bulmak, elemanların en büyük veya en küçük değerini bulmak, demetler arasında karşılaştırma yapmak sayılabilir.
Aşağıda, demet elemanlarını sıralayan bir örnek kod sunulmuştur:
# Bir demet oluşturmademet = (1, 4, 7, 2, 3, 8, 5)# Öğeleri sıralamaksortedDemet = tuple(sorted(demet))print(sortedDemet)
Bu kodla, demetin elemanlarını küçükten büyüğe doğru sıralayabilirsiniz.
Özetle, demetler Python programlama dilinde kullanılan önemli bir veri yapısıdır. Birçok senaryoda listelerin kullanımından daha avantajlıdır. Demet veri yapısı, değişmez verilerin yönetiminde önemli bir rol oynar ve birçok işlevi yerine getirmek için kullanılabilir.
İşlevleri
Demetler, tuple olarak bilinen ve değiştirilemeyen bir sıralı veri yapısıdır. Python'da demetler, parantez () işaretiyle tanımlanır. Demetler, birden fazla öğe içerebilir ve bu öğeler virgülle ayrılır.
Demetlerin kullanım işlevleri şunlardır:
- Belirli bir sırayla öğeleri gruplama ve saklama
- Değiştirilemeyen veri yapısı olmaları nedeniyle, veri bütünlüğünü korumak
- Fonksiyonlardan birden fazla değer döndürmek
- Kodlarda yerden tasarruf sağlamak
Demetlerin örnek kodları şu şekilde gösterilebilir:
Kod | Anlamı |
---|---|
my_tuple = (1, 2, 3) | my_tuple adında bir demet oluşturur ve içine 1, 2 ve 3 değerlerini atar. |
print(my_tuple[0]) | my_tuple demetinin ilk öğesini yazdırır. |
print(len(my_tuple)) | my_tuple demetinin öğe sayısını yazdırır. |
new_tuple = my_tuple + (4, 5, 6) | my_tuple demetine 4, 5 ve 6 değerlerini ekler ve yeni bir demet oluşturur. |
del my_tuple | my_tuple demetini siler. |
Bu örnekler, demetlerin nasıl tanımlandığını, öğelerine nasıl erişileceğini, öğe sayısını nasıl hesaplayabileceğimizi, demetleri nasıl değiştiremeyeceğimizi, yeni değerler nasıl ekleyebileceğimizi ve demetleri nasıl silebileceğimizi göstermektedir.
Set Veri Yapısı
Python'daki set veri yapısı, benzersiz ve sıralı olmayan öğeleri içeren bir koleksiyonu temsil eder. Bu veri yapısı, benzersiz öğeleri hızlı bir şekilde bulmak ya da veri kümesi içinde bir sorgu gerçekleştirmek için kullanılabilir.
Bir set, süslü parantez {} kullanılarak tanımlanır ve virgülle ayrılmış öğeler içerir. Örneğin, a = {1, 2, 3} olarak bir set tanımlanabilir. Bu veri yapısının özellikleri ise aşağıdaki gibidir:
- Setlerdeki öğeler sırasız olduğu için, hangi sırayla tanımlandıklarına bakılmaksızın eşsiz bir sıralı liste elde edilir.
- Bir set içinde tekrar eden öğeler bulunamaz. Eğer tanımlarken aynı öğeyi birden fazla kez kullanırsanız, sonuçta yine tek bir öğe olacaktır.
- Bir set içinde değiştirilemeyen öğeler yer alabilir, yani listeler, başka setler vb. set içinde bulunabilirken değiştirelemez.
- Setlerde indeksler yok, bu nedenle öğelere bir indeksle erişmek mümkün değildir. Bunun yerine, öğeleri döngü kullanarak alabilirsiniz.
İşlem | Açıklama | Örnek |
---|---|---|
set() | Boş bir set oluşturulur. | x = set() |
add() | Bir öğe sete eklenir. | x.add(4) |
remove() | Bir öğe setten silinir. Eğer öğe yoksa hata verir. | x.remove(4) |
discard() | Bir öğe setten silinir. Eğer öğe yoksa hata vermez. | x.discard(4) |
union() | İki set birleştirilir. | x.union(y) |
intersection() | İki setin kesişimi alınır. | x.intersection(y) |
difference() | Bir setin diğer setten farkını alır. | x.difference(y) |
Setler, birçok durumda diğer veri yapılarından daha iyi bir seçenek olabilir. Özellikle, bir veri kümesindeki benzersiz öğeleri hızlı bir şekilde elde etmek istediğinizde veya veri kümesinde bazı öğeleri bulmak için sorgu gerçekleştiriyorsanız, setler mükemmel bir çözümdür.