Python'da Veri Yapıları – Eksiksiz Kılavuz
Yayınlanan: 2021-06-14İçindekiler
Veri Yapısı Nedir?
Veri yapısı, verimli kullanım için verilerin hesaplamalı depolanmasını ifade eder. Verileri kolayca değiştirilebilecek ve erişilebilecek şekilde saklar. Toplu olarak veri değerlerini, aralarındaki ilişkiyi ve veriler üzerinde gerçekleştirilebilecek işlemleri ifade eder. Veri yapısının önemi, bilgisayar programları geliştirmek için uygulanmasında yatmaktadır. Bilgisayar programları büyük ölçüde verilere dayandığından, kolay erişim için verilerin uygun şekilde düzenlenmesi, herhangi bir program veya yazılım için her şeyden önce önemlidir.
Bir veri yapısının dört ana işlevi şunlardır:
- Bilgi girmek için
- Bilgileri işlemek için
- Bilgileri korumak için
- Bilgileri almak için
Python'da Veri Yapısı Türleri
Verilere kolay erişim ve depolama için Python tarafından çeşitli veri yapıları desteklenir. Python veri yapıları türleri, ilkel ve ilkel olmayan veri türleri olarak sınıflandırılabilir. İlk veri türleri Tamsayılar, Kayan Noktalar, Dizeler ve Boolean'ı içerirken, ikincisi dizi, liste, demetler, sözlükler, kümeler ve Dosyalar'dır. Bu nedenle, python'daki veri yapıları hem yerleşik veri yapıları hem de kullanıcı tanımlı veri yapılarıdır. Yerleşik veri yapısı, ilkel olmayan veri yapısı olarak adlandırılır.
Yerleşik Veri yapıları
Python, diğer verilerin depolanması için kapsayıcı görevi gören çeşitli veri yapılarına sahiptir. Bu python veri yapıları Liste, Sözlükler, Tuple ve Kümelerdir.
Kullanıcı tanımlı veri yapıları
Bu veri yapıları, python'daki yerleşik veri yapılarıyla aynı işlevle programlanabilir . Kullanıcı tanımlı veri yapıları; Bağlantılı Liste, Yığın, Kuyruk, Ağaç, Grafik ve Hashmap'tir.
Dahili Veri yapılarının listesi ve açıklaması
1. Liste
Bir listede saklanan veriler sıralı olarak düzenlenir ve farklı veri türlerine sahiptir. Her veri için bir adres atanır ve indeks olarak bilinir. İndeks değeri 0 ile başlar ve son elemana kadar devam eder. Buna pozitif indeks denir. Öğelere tersten erişilirse, negatif bir dizin de vardır. Buna negatif indeksleme denir.
Liste oluşturma
Liste köşeli parantez olarak oluşturulur. Elemanlar daha sonra buna göre eklenebilir. Bir liste oluşturmak için köşeli parantez içine eklenebilir. Hiçbir öğe eklenmezse boş bir liste oluşturulur. Aksi takdirde listedeki elemanlar oluşturulacaktır.
Giriş my_list = [] #boş liste oluştur yazdır(my_list) my_list = [1, 2, 3, 'example', 3.132] #veri içeren liste oluşturma yazdır(my_list) | Çıktı [] [1, 2, 3, 'örnek', 3.132] |
Liste içine eleman ekleme
Bir liste içindeki öğelerin eklenmesi için üç işlev kullanılır. Bu işlevler append(), extension() ve insert()'tir.
- Tüm öğeler, append() işlevi kullanılarak tek bir öğe olarak eklenir.
- Listeye tek tek eleman eklemek için extension() fonksiyonu kullanılır.
- İndeks değerine göre eleman eklemek için insert() fonksiyonu kullanılır.
Giriş my_list = [1, 2, 3] yazdır(my_list) my_list.append([555, 12]) #tek bir öğe olarak ekle yazdır(my_list) my_list.extend([234, 'more_example']) #farklı öğeler olarak ekle yazdır(my_list) my_list.insert(1, 'insert_example') #add element i yazdır(my_list) | Çıktı: [1, 2, 3] [1, 2, 3, [555, 12]] [1, 2, 3, [555, 12], 234, 'more_example'] [1, 'insert_example', 2, 3, [555, 12], 234, 'more_example'] |
Bir liste içindeki öğelerin silinmesi
Listeden bir öğeyi silmek için python'da yerleşik bir "del" anahtar sözcüğü kullanılır. Ancak bu işlev silinen öğeyi döndürmez.
- Silinen bir öğeyi döndürmek için pop() işlevi kullanılır. Silinecek elemanın indeks değerini kullanır.
- Remove() işlevi, bir öğeyi değerine göre silmek için kullanılır.
Çıktı:
[1, 2, 3, 'örnek', 3.132, 30]
[1, 2, 3, 3.132, 30]
Atılan Öğe: 2 Kalan liste: [1, 3, 3.132, 30]
[]
Bir listedeki öğelerin değerlendirilmesi
- Bir listedeki öğeyi değerlendirmek basittir. Listeyi yazdırmak, öğeleri doğrudan görüntüler.
- Belirli öğeler, indeks değeri geçirilerek değerlendirilebilir.
Çıktı:
1
2
3
örnek vermek
3.132
10
30
[1, 2, 3, 'örnek', 3.132, 10, 30]
Örnek vermek
[1, 2]
[30, 10, 3.132, 'örnek', 3, 2, 1]
Yukarıda belirtilen işlemlere ek olarak, listelerle çalışmak için python'da başka yerleşik işlevler de mevcuttur.
- len(): fonksiyon, listenin uzunluğunu döndürmek için kullanılır.
- index(): Bu fonksiyon, kullanıcının geçirilen bir değerin indeks değerini bilmesini sağlar.
- kendisine iletilen değerin sayısını bulmak için count() işlevi kullanılır.
- sort(), bir listedeki değeri sıralar ve listeyi değiştirir.
- sorted(), bir listedeki değeri sıralar ve listeyi döndürür.
Çıktı
6
3
2
[1, 2, 3, 10, 10, 30]
[30, 10, 10, 3, 2, 1]
2. Sözlük
Sözlük, tek öğeler yerine anahtar/değer çiftlerinin depolandığı bir veri yapısı türüdür. Kişilerin tüm numaralarını ve Telefon numaralarını içeren bir telefon rehberi örneği ile açıklanabilir. Buradaki isim ve telefon numarası, “anahtar” olan sabit değerleri ve o tuşun değerleri olarak tüm bireylerin numaralarını ve isimlerini tanımlar. Bir anahtarı değerlendirmek, o anahtarda depolanan tüm değerlere erişim sağlayacaktır. Python'daki bu tanımlanmış anahtar/değer yapısı, sözlük olarak bilinir.
Sözlük oluşturma
- Çiçek parantezleri boştayken dict() işlevi bir sözlük oluşturmak için kullanılabilir.
- Anahtar/değer çiftleri, sözlük oluşturulurken eklenecektir.
Anahtar/değer çiftlerinde değişiklik
Sözlükte herhangi bir değişiklik sadece anahtar ile yapılabilir. Bu nedenle, önce anahtarlara erişilmeli ve ardından modifikasyonlar yapılmalıdır.
Giriş my_dict = {'İlk': 'Python', 'İkinci': 'Java'} print(my_dict) my_dict['İkinci'] = 'C++' #değişen öğe print(my_dict) my_dict['Üçüncü'] = 'Ruby' #ekleme anahtar/değer çifti yazdır(my_dict) | Çıktı: {'Birinci': 'Python', 'İkinci': 'Java'} {'Birinci': 'Python', 'İkinci': 'C++'} {'Birinci': 'Python', 'İkinci': 'C++', 'Üçüncü': 'Ruby'} |
Sözlük silme
Tüm sözlüğü silmek için clear() işlevi kullanılır. Sözlük, get() işlevi kullanılarak veya anahtar değerleri iletilerek anahtarlar aracılığıyla değerlendirilebilir.
Giriş dict = {'Ay': 'Ocak', 'Sezon': 'kış'} print(dict['İlk']) print(dict.get('İkinci') | Çıktı Ocak ayı Kış mevsimi |
Bir sözlükle ilişkili diğer işlevler, anahtarlar(), değerler() ve öğelerdir().
3. Grup
Listeye benzer şekilde, Tuple'lar veri depolama listeleridir, ancak tek fark, bir demet içinde depolanan verilerin değiştirilememesidir. Bir demet içindeki veriler değişebilirse, ancak o zaman verileri değiştirmek mümkündür.
- Tuple'lar, tuple() işlevi aracılığıyla oluşturulabilir.
Giriş
new_tuple = (10, 20, 30, 40)
yazdır(yeni_tuple)
Çıktı
(10, 20, 30, 40)
- Bir demet içindeki öğeler, bir listedeki öğelerin değerlendirilmesiyle aynı şekilde değerlendirilebilir.
Giriş
new_tuple2 = (10, 20, 30, 'yaş')
new_tuple2'deki x için:
yazdır(x)
yazdır(yeni_tuple2)
yazdır(new_tuple2[0])
Çıktı
10
20
30
Yaş
(10, 20, 30, 'yaş')
10
- '+' operatörü başka bir demet eklemek için kullanılır
Giriş
demet = (1, 2, 3)
demet = demet + (4, 5, 6
yazdır(tuple)
Çıktı
(1, 2, 3, 4, 5, 6)
4. Ayarla
Küme veri yapısı aritmetik kümelere benzer. Temelde benzersiz öğelerin koleksiyonudur. Veriler yinelenmeye devam ederse, kümeler bu öğeyi yalnızca bir kez eklemeyi düşünür.
- Sadece çiçek parantezleri içindeki değerleri ileterek bir set oluşturulabilir.
Giriş
küme = {10, 20, 30, 40, 40, 40}
yazdır(ayarla)
Çıktı
{10, 20, 30, 40}
- add() işlevi, bir kümeye öğe eklemek için kullanılabilir.
- İki kümeden verileri birleştirmek için union() işlevi kullanılabilir.
- Her iki kümede de bulunan verileri belirlemek için kesişim() işlevi kullanılır.
- Fark() işlevi, ortak verileri kaldırarak yalnızca kümeye özgü verileri çıkarır.
- simetrik_difference() işlevi, her iki kümeye özgü verileri çıkarır.
Kullanıcı tanımlı veri yapılarının listesi ve açıklaması
1. Yığınlar
Yığın, Son giren İlk çıkar (LIFO) veya İlk giren Son Çıkaran (FIFO) yapısı olan doğrusal bir yapıdır. Yığında iki ana işlem vardır, yani push ve pop. Push, bir öğenin listenin en üstüne eklenmesi anlamına gelirken pop, bir öğenin yığının altından çıkarılması anlamına gelir. İşlem, Şekil 1'de iyi bir şekilde açıklanmıştır.
yığının kullanışlılığı
- Önceki öğeler geriye dönük izleme yoluyla değerlendirilebilir.
- Özyinelemeli öğelerin eşleşmesi.
Kaynak
Şekil 1: Yığının grafiksel gösterimi
Örnek vermek
Çıktı
['birinci ikinci üçüncü']
['birinci ikinci üçüncü dördüncü beşinci']
beşinci
['birinci ikinci üçüncü dördüncü']
2. Kuyruk
Yığınlara benzer şekilde, bir kuyruk, bir uca bir öğenin eklenmesine ve diğer uçtan silinmesine izin veren doğrusal bir yapıdır. İki işlem kuyruğa alma ve kuyruktan çıkarma olarak bilinir. En son eklenen öğe, yığınlar gibi önce kaldırılır. Kuyruğun grafiksel bir temsili Şekil 2'de gösterilmektedir. Kuyruğun ana kullanımlarından biri, şeylerin girildiği anda işlenmesi içindir.
Kaynak
Şekil 2 : Kuyrukların grafiksel gösterimi
Örnek vermek
Çıktı
['birinci ikinci üçüncü']
['birinci ikinci üçüncü dördüncü beşinci']
ilk
beşinci
['ikinci', 'üçüncü', 'dördüncü', 'beşinci']
3. Ağaç
Ağaçlar, kenarlar aracılığıyla birbirine bağlanan düğümlerden oluşan doğrusal olmayan ve hiyerarşik veri yapılarıdır. Python ağacı veri yapısı bir kök düğüme, üst düğüme ve alt düğüme sahiptir. Kök, bir veri yapısının en üst öğesidir. İkili ağaç, öğelerin ikiden fazla alt düğüme sahip olmadığı bir yapıdır.
Ağacın faydası
- Veri öğelerinin yapısal ilişkilerini görüntüler.
- Her düğümde verimli geçiş
- Kullanıcılar verileri ekleyebilir, arayabilir, alabilir ve silebilir.
- Esnek veri yapıları
Şekil 3: Bir ağacın grafiksel gösterimi
Kaynak
Örnek vermek:
Çıktı
Öncelikle
ikinci
Üçüncü
4. Grafik
Python'daki bir diğer doğrusal olmayan veri yapısı , düğümler ve kenarlardan oluşan grafiktir. Grafiksel olarak, bazı nesneler bağlantılar yoluyla birbirine bağlı olan bir dizi nesneyi görüntüler. Köşeler birbirine bağlı nesnelerdir, bağlantılar ise kenarlar olarak adlandırılır. Bir grafiğin temsili, anahtarın köşeleri ve değerlerin kenarları temsil ettiği python'un sözlük veri yapısı aracılığıyla yapılabilir.
Grafikler üzerinde yapılabilecek temel işlemler
- Grafiğin köşelerini ve kenarlarını görüntüleyin.
- Bir tepe noktasının eklenmesi.
- Bir kenarın eklenmesi.
- Bir grafiğin oluşturulması
Grafiğin kullanışlılığı
- Bir grafiğin temsilini anlamak ve takip etmek kolaydır.
- Bağlantılı ilişkileri, yani Facebook arkadaşlarını temsil etmek için harika bir yapıdır.
Şekil 4: Bir grafiğin grafiksel gösterimi
Kaynak
Örnek vermek
g = grafik(4)
g.kenar(0, 2)
g.kenar(1, 3)
g.kenar(3, 2)
g.kenar(0, 3)
g.__repr__()
Çıktı
0 köşesinin komşuluk listesi
kafa -> 3 -> 2
Köşe 1'in komşuluk listesi
kafa -> 3
Köşe 2'nin komşuluk listesi
kafa -> 3 -> 0
Köşe 3'ün komşuluk listesi
kafa -> 0 -> 2 -> 1
5. Hashmap
Hashmap'ler, anahtar/değer çiftlerinin depolanması için yararlı olan dizinlenmiş python veri yapılarıdır . Hashmap'lerde saklanan veriler, bir hash fonksiyonu yardımıyla hesaplanan anahtarlar aracılığıyla alınır. Bu tür veri yapıları, öğrenci verilerinin, müşteri ayrıntılarının vb. saklanması için kullanışlıdır. Python'daki sözlükler, bir hashmap örneğidir.
Örnek vermek
Çıktı
0 -> ilk
1 -> saniye
2 -> üçüncü
0 -> ilk
1 -> saniye
2 -> üçüncü
3 -> dördüncü
0 -> ilk
1 -> saniye
2 -> üçüncü
kullanışlılık
- Diğer veri yapılarına göre bilgi almanın en esnek ve güvenilir yöntemidir.
6. Bağlantılı liste
Bir tür doğrusal veri yapısıdır. Temel olarak, python'daki bağlantılar aracılığıyla bir araya getirilen bir dizi veri öğesidir. Bağlantılı bir listedeki öğeler, işaretçiler aracılığıyla bağlanır. Bu veri yapısının ilk düğümü başlık, son düğüm ise kuyruk olarak adlandırılır. Bu nedenle, bağlantılı bir liste, değerleri olan düğümlerden oluşur ve her düğüm, başka bir düğüme bağlı bir işaretçiden oluşur.
Bağlantılı listelerin kullanışlılığı
- Sabit bir diziyle karşılaştırıldığında, bağlantılı bir liste, dinamik bir veri girişi biçimidir. Düğümlerin belleğini ayırdığı için bellek kaydedilir. Bir dizideyken, boyutun önceden tanımlanmış olması gerekir, bu da bellek israfına yol açar.
- Bağlantılı bir liste bellekte herhangi bir yerde saklanabilir. Bağlantılı bir liste düğümü güncellenebilir ve farklı bir konuma taşınabilir.
Şekil 6: Bir Bağlantılı Liste'nin grafiksel gösterimi
Kaynak
Örnek vermek
Çıktı:
['birinci ikinci üçüncü']
['birinci', 'ikinci', 'üçüncü', 'altıncı', 'dördüncü', 'beşinci']
['birinci', 'üçüncü', 'altıncı', 'dördüncü', 'beşinci']
Çözüm
Python'daki çeşitli veri yapıları keşfedilmiştir. Acemi veya uzman olsun, veri yapıları ve algoritmalar göz ardı edilemez. Veriler üzerinde herhangi bir işlem yapılırken, veri yapıları kavramları hayati bir rol oynamaktadır. Veri yapıları, bilgilerin organize bir şekilde saklanmasına yardımcı olurken, algoritmalar veri analizi boyunca rehberlik etmeye yardımcı olur. Bu nedenle, hem python veri yapıları hem de algoritmalar, bilgisayar bilimcisinin veya herhangi bir kullanıcının verilerini işlemesine yardımcı olur.
Veri yapıları hakkında bilgi edinmek istiyorsanız, IIIT-B & upGrad'ın çalışan profesyoneller için oluşturulmuş ve 10'dan fazla vaka çalışması ve proje, uygulamalı uygulamalı atölye çalışmaları, endüstri uzmanlarıyla mentorluk, 1 Endüstri danışmanlarıyla bire bir, en iyi firmalarla 400+ saat öğrenim ve iş yardımı.
Python'da hangi veri yapısı daha hızlı?
Sözlüklerde aramalar daha hızlıdır çünkü Python bunları uygulamak için karma tabloları kullanır. Ayrımı göstermek için Büyük O kavramlarını kullanırsak, sözlükler sabit zaman karmaşıklığına, O(1)'e sahipken, listeler doğrusal zaman karmaşıklığına, O(n) sahiptir.
Python'da sözlükler, binlerce girişle sık sık veri aramanın en hızlı yoludur. Sözlükler, Python'da yerleşik eşleme türü oldukları için yüksek düzeyde optimize edilmiştir. Ancak sözlüklerde ve listelerde ortak bir uzay-zaman değiş tokuşu vardır. Yaklaşımımız için gereken süreyi azaltabilsek de daha fazla bellek alanı kullanmamız gerekeceğini gösterir.
Listelerde, istediğinizi elde etmek için tüm listeyi gözden geçirmelisiniz. Öte yandan bir sözlük, tüm anahtarlara bakmadan aradığınız değeri döndürür.
Python listesinde veya dizide hangisi daha hızlı?
Genel olarak, Python listeleri inanılmaz derecede esnektir ve tamamen heterojen, rastgele verileri tutabilir, ayrıca hızlı ve yaklaşık sabit zamanda eklenebilir. Listenizi hızlı ve acısız bir şekilde küçültüp genişletmeniz gerekiyorsa, gitmeniz gereken yol bunlar. Bununla birlikte, kısmen listedeki her öğe ayrı bir Python nesnesinin oluşturulmasını gerektirdiğinden, dizilerden çok daha fazla yer kaplarlar.
Öte yandan, array.array türü aslında C dizilerinin etrafındaki ince bir sarmalayıcıdır. Yalnızca homojen verileri (yani aynı türdeki verileri) taşıyabilir, bu nedenle bellek sizeof(one object) * uzunluk baytlarıyla sınırlıdır.
NumPy dizisi ve listesi arasındaki fark nedir?
Numpy, Python'un bilimsel bilgi işlem çekirdek paketidir. Bunları işlemek için yardımcı programların yanı sıra büyük bir çok boyutlu dizi nesnesi kullanır. Numpy dizisi, negatif olmayan tamsayıların bir demeti tarafından indekslenen özdeş tipteki değerlerin bir ızgarasıdır.
Listeler Python çekirdek kitaplığına dahil edildi. Liste, Python'daki bir diziye benzer, ancak yeniden boyutlandırılabilir ve çeşitli türlerde öğeler içerebilir. Buradaki gerçek fark nedir? Cevap performanstır. Numpy veri yapıları boyut, performans ve işlevsellik açısından daha verimlidir.