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.