Python öğrenmesi kolay bir programlama dilidir. Ancak derin konulara dalmadan önce veri yapıları gibi temel konuları iyice öğrenmemiz gerekir. Bunun nedeni, ileride içinde bulunduğumuz her proje de attığımız her analitik adımımızın arkasında, verilerin depolanması, düzenlemesi gibi temel unsurlar olacaktır. Verilerimizi verimli bir şekilde sakladığımızda bilgi elde etmemiz çok daha kolaydır. Aslında bu şekilde, kodumuz olması gerektiğinden çok daha hızlı çalışacaktır ve tonlarca zamandan tasarruf etmiş olacağız, bunu kim istemez ki? Bu yazı da Python dilindeki veri yapıları hakkında bilmeniz gereken her şeyi açıklıyor olacağız.
İçindekiler
Veri Yapıları Nedir?
Veri yapıları, verileri verimli bir şekilde depolamanın ve organize etmenin bir yoludur. Bu, verilere kolayca erişmenize ve işlemler gerçekleştirmenize olanak sağlar.
Veri yapıları söz konusu olduğunda, her soruna uyacak bir kalıp modeli yoktur. Verilerinizi ihtiyacına göre farklı şekillerde saklamak isteyebilirsiniz. Python, verileri kolayca düzenlemeye yardımcı olacak bir dizi yerleşik veri yapısına sahiptir. Bunları iyi bir şekilde öğrendikten sonra, hangi veri yapısının amacımızı etkili bir şekilde çözeceğini de tam olarak öğrenmiş oluruz.
Python’da Listeler – Veri Yapıları #1
Python programlama dilinde en çok tercih edilen veri yapıları listelerdir. Listeler, tam sayılardan, dizelere ve hatta başka bir listeye kadar farklı tipte veri parçalarını depolamak için kullanılır. Ayrıca değiştirilebilirler, yani liste oluşturulduktan sonra listeye ekleme veya çıkartma yapılabilir.
Listeler [köşeli] parantez içine alarak oluşturulur ve her elementi virgülle ayrılır.
#liste oluşturulması liste = ['fenerbahce','galatasaray','besiktas'] print(type(liste)) print(liste) #Beklenen çıktılar <class 'list'> ['fenerbahce', 'galatasaray', 'besiktas']
Her elemanın kendine has bir konumu olduğu için liste içinde tekrar eden değerler de sorun teşkil etmeyecektir.
Peki, bu liste içindeki elemanlara nasıl erişiriz? Bunun için Indexing kullanıyoruz. Listedeki her elemanın, konumuna bağlı olarak kendisine has bir dizin vardır. Mesela dizinin ilk elemanı 0 dizinine, bir sonraki elemanı ise 1 dizinine sahiptir. Listenin son elemanı ise, listenin uzunluğu N tam sayısı ise N-1 dizinine sahiptir.
# Yukarıda tanımlanmış olan listeden devam ediyoruz. print(liste[0]) print(liste[1]) print(liste[2) #Beklenen çıktı: fenerbahce galatasaray besiktas
Ancak dizinlerin her zaman pozitif olması gerekmez, negatifte olabilir. Pozitif dizinler elemanları listenin başından döndürürken negatif dizinler listenin sonundan döndürür.
print(liste[-1]) #Beklenen çıktı: besiktas
Daha önce de dediğimiz gibi listeye eleman ekleyip çıkartabiliyorduk. Peki bunu nasıl yapıyoruz? İki metodumuz var:
- append() : Listenin sonuna yeni elemanı ekler.
- insert() : Listede herhangi spesifik bir dizine eleman ekler.
liste.append('sinopspor') print(liste) #Beklenen çıktı: fenerbahce galatasaray besiktas sinopspor
liste.insert(1,'trabzonspor') print(liste) #Beklenen çıktı: fenerbahce trabzonspor besiktas sinopspor
Listeye eleman ekleyebildiğimiz gibi çıkartma da yapabiliriz. Bunun için de 2 metodumuz var:
- remove(): Silinmek istenen eleman, parametre olarak verilir.
- pop(): Herhangi bir dizinden eleman çıkartmak için kullanılır. Eğer bir dizin belirtilmezse listenin en son elemanı silinir.
# orjinal liste print(liste) liste.remove('trabzonspor') print(liste) liste.pop(1) print(liste) liste.pop() print(liste) #Beklenen çıktı: ['fenerbahce','trabzonspor','galatasaray','besiktas','sinopspor'] ['fenerbahce','galatasaray','besiktas','sinopspor'] ['fenerbahce','besiktas','sinopspor'] ['fenerbahce','besiktas']
Listelerdeki en önemli metodlardan biri de sort() methodur. Bu methodu listedeki elemanları sıralamak için kullanırız. Liste elemanlarını artan veya azalan sırada sıralayabilirsiniz.
ders_notlari = [5,4,1,3,2] #Artan sıraya göre sırala ders_notlari.sort() print(ders_notlari) # Azalan sıraya göre sırala ders_notlari.sort(reverse=True) print(ders_notlari) #Beklenen çıktı: [1,2,3,4,5] [5,4,3,2,1]
Elemanları sayı içeren listeleri sıralamak gayet kolay, dize elemanları içeren bir listeyi nasıl sıralarız? Dize değerleri, ASCII değerleri kullanılarak sıralanır. Dizedeki her karakterin kendisiyle ilişkilendirilmiş bir tam sayı değeri vardır.
#İlk tanımladığımız listeye bakacağız. liste.sort() print(liste) liste.sort(reverse=True) print(liste) #Beklenen çıktı: ['besiktas','fenerbahce','galatasaray','sinopspor','trabzonspor'] ['trabzonspor','sinopspor','galatasaray','fenerbahce','besiktas']
Listeleri Kullanarak Stack ve Queue
Liste kullanılarak oluşturulan en popüler iki kullanıcı tanımlı veri yapısı Stack ve Queue’dur.
Stackler, liste elemanlarının eklenmesinin veya silinmesinin listenin sonundan yapıldığı bir veri yapısıdır. Bunu bir kitap yığını olarak düşünün. Bir kitap yığınına kitap eklemeniz ya o yığından kitap almanız gerektiğinde bunu en üstten alarak yaparsınız. Last-In-First-Out (Son giren ilk çıkar) konseptini kullanır.
stack = [1,2,3,4] stack.append(5) print(stack) stack.pop() print(stack) #Beklenen çıktı: [1,2,3,4,5] [1,2,3,4]
Diğer yandan Queue, listenin sonundan ekleme yapıldığı, ancak silinmesinin listenin önünden gerçekleştiği bir veri yapısıdır. Bunu gerçek dünyada bir kuyruk olarak düşünebilirsiniz. Öndeki insanlar kuyruktan çıktığında kuyruk kısalır. Yeni bir kişi kuyruğun sonunda girer ve kuyruk uzar. İlk giren ilk çıkar konseptini kullanır.
queue = [1,2,3,4] queue.append(5) print(queue) queue.pop(0) print(queue) #Beklenen çıktı [1,2,3,4,5] [2,3,4,5]
Python’da Tuples : Veri Yapılar #2
Tuples, Python’da çok popüler bir veri yapısıdır. Listeler ile oldukça benzerdir, tek farkı değiştirilemezler. Bu, tuple oluşturulduktan sonra hiç bir değer eklenip silenemeyeceği anlamına gelmektedir.
Tuples, (parantez) içine değerler yazılarak oluşturulur ve her eleman virgülle ayrılır.
gezegen = (6,'Saturn','genis') print(type(planet)) print(planet) #Beklenen çıktı <class 'tuple'> (6, 'Saturn', 'genis')
Tuple, paketleme ve paketten çıkarma, tek bir satırdaki başka bir tupledan bir dizi elemana değer atmak için gerçekleştirebileceğiniz bazı yararlı işlemlerdir.
gezegenler = ('merkür', 'venüs', 'dünya') a,b,c = gezegenler print(a) print(b) print(c) #Beklenen çıktı: merkür venüs dünya
Tuple veri yapısının değiştirilemez olduğunu söylemiştik, fakat değişiklik yapmak için listelere dönüştürebiliriz. Bunu yapmak için list() metodunu kullanıyoruz.
gezegenler = ('merkür', 'venüs', 'dünya') gezegenler_liste= list(gezegenler) type(gezegenler_liste) #Beklenen çıktı: list
Python’da Sözlük: Veri Yapıları #3
Sözlük, değişmeyen bir Python veri yapısı örneğidir. Ancak nesneleri saklarken sıralama sizin yerleştirdiğiniz gibi olmayabilir. Sözlükleri listeden ayıran şeyi elemanların içinde saklanma biçimidir. Bir sözlükteki elemanlara, listede yaptığımız gibi dizinlerden üzerinden değil de anahtar değerleri üzerinden erişiyoruz.
Sözlükler, noktalı virgülle ayrılmış {süslü parantezler} içindeki anahtarlar ve değerler yazılarak oluşturulur. Her bir anahtar/değer virgülle ayrılır.
sozluk = {'one':'python', 'two':'java', 'three': 'julia'} print(sozluk) #Beklenen çıktı: {'one':'python', 'two':'java', 'three': 'julia'}
Elemanın anahtarını kullanarak ilgili değere kolayca erişebiliriz.
sozluk['one'] #Beklenen çıktı python
Bir sözlükteki anahtarlara keys(), ilgili anahtarlara erişmek için ise values() metodunu kullanırız.
anahtarlar = list(sozluk.keys()) print(anahtarlar) değerler = list(sozluk.values()) #Beklenen çıktı: ['one','two','three'] ['python','java','julia']