Python'da Diziler Kılavuzu

Python'da Diziler Kılavuzu

Giriş

Telefonunuzda en sevdiğiniz şarkılardan oluşan bir çalma listesinin olduğunu hayal edin. Bu çalma listesi, her şarkının belirli bir sıraya yerleştirildiği bir listedir. İlk şarkıyı çalabilir, ikinciye geçebilir, beşinciye atlayabilir ve bu şekilde devam edebilirsiniz. Bu çalma listesi bilgisayar programcılığındaki bir diziye çok benzer.

Diziler en temel ve en yaygın kullanılan veri yapılarından biridir.

Temelde bir dizi, birden fazla öğeyi (sayılar, karakterler ve hatta diğer diziler gibi) belirli bir sırada depolamanın yapılandırılmış bir yoludur ve konumunu (dizin) biliyorsanız herhangi bir öğeye hızlı bir şekilde erişebilir, değiştirebilir veya kaldırabilirsiniz.

Bu kılavuzda size dizi veri yapısına ilişkin kapsamlı bir genel bakış sunacağız. Öncelikle dizilerin ne olduğuna ve temel özelliklerinin neler olduğuna bir göz atacağız. Daha sonra Python dünyasına geçiş yaparak dizilerin gerçek dünya senaryolarında nasıl uygulandığını, değiştirildiğini ve uygulandığını keşfedeceğiz.

Dizi Veri Yapısını Anlamak

Diziler, bilgisayar bilimi ve programlamada kullanılan en eski ve en temel veri yapıları arasındadır. Basitlikleri, belirli operasyonlardaki verimlilikleriyle birleştiğinde, onları veri yönetimi ve manipülasyonu alanına giren herkes için temel bir konu haline getiriyor.

Bir dizi, genellikle öğelerden oluşan bir koleksiyondur. aynı tip, içinde saklanan bitişik bellek konumları.

Bu bitişik depolama, dizilerin, indeksi göz önüne alındığında herhangi bir öğeye sabit zamanlı erişim sağlamasına olanak tanır. Bir dizideki her öğeye bir denir elemanve dizideki bir öğenin konumu onun tarafından tanımlanır. indeks, genellikle sıfırdan başlar.

Örneğin, bir tamsayı dizisini düşünün: [10, 20, 30, 40, 50]. Burada eleman 20 indeksi var 1:

python dizi indeksleme

Çoklu avantajları verilerimizi depolamak için dizileri kullanma. Örneğin, bellek düzenlerinden dolayı diziler aşağıdaki işlemlere izin verir: O (1) Bir öğeye indeksinden erişirken (sabit) zaman karmaşıklığı. Bu, özellikle öğelere rastgele erişime ihtiyacımız olduğunda faydalıdır. Ek olarak, diziler şurada saklanır: bitişik bellek konumlarıBu, daha iyi önbellek konumu ve belirli işlemlerde genel performans iyileştirmelerine yol açabilir. Dizi kullanmanın bir diğer dikkate değer avantajı, dizilerin bir kez bildirildiğinde sabit bir boyuta sahip olması nedeniyle belleği yönetmenin ve beklenmedik taşmalardan veya bellek yetersiz hatalarından kaçınmanın daha kolay olmasıdır.

not: Diziler özellikle aşağıdaki senaryolarda kullanışlıdır: Koleksiyonun boyutu önceden bilinir ve sabit kalırveya rastgele erişimin ekleme ve silme işlemlerinden daha sık olduğu yerlerde.

Diğer taraftan diziler kendi setleriyle birlikte gelir. sınırlamaları. Geleneksel dizilerin temel sınırlamalarından biri onların sabit boyut. Bir dizi oluşturulduktan sonra boyutu değiştirilemez. Bu, boşa harcanan bellek (dizi çok büyükse) veya yeniden boyutlandırma ihtiyacı (dizi çok küçükse) gibi sorunlara yol açabilir. Bunun yanı sıra, bir dizinin ortasına bir öğe eklemek veya silmek, öğelerin kaydırılmasını gerektirir ve bu da O (n) bu işlemler için zaman karmaşıklığı.

Tüm bunları özetlemek için, bu kılavuzun başındaki şarkı çalma listesi örneğini kullanarak dizilerin ana özelliklerini açıklayalım. Dizi, aşağıdaki özelliklere sahip bir veri yapısıdır:

  • İndekslendi mi: Tıpkı çalma listenizdeki her şarkının bir numarası (1, 2, 3,…) olduğu gibi, dizideki her öğenin de bir dizini vardır. Ancak çoğu programlama dilinde indeks 0'dan başlar. Yani ilk öğe indeks 0'da, ikincisi indeks 1'dedir ve bu şekilde devam eder.

  • Sabit Boyutu Vardır: Örneğin 10 şarkılık bir çalma listesi oluşturduğunuzda, önce birini çıkarmadan 11. şarkıyı ekleyemezsiniz. Benzer şekilde dizilerin de sabit bir boyutu vardır. Belirli bir boyutta bir dizi oluşturduğunuzda kapasitesinden daha fazla öğe ekleyemezsiniz.

  • Homojendir: Çalma listenizdeki tüm şarkılar müzik parçalarıdır. Benzer şekilde bir dizideki tüm öğeler aynı türdendir. Bir tamsayı diziniz varsa, aniden bir metin dizesini bu dizide saklayamazsınız.

  • Doğrudan Erişime Sahiptir: Çalma listenizdeki 7. şarkıyı dinlemek istiyorsanız doğrudan şarkıya geçebilirsiniz. Benzer şekilde dizilerde, indeksini biliyorsanız herhangi bir öğeye anında erişebilirsiniz.

  • Bitişik Bellek: Bu biraz daha teknik. Bir bilgisayarın belleğinde bir dizi oluşturulduğunda, sürekli bir bellek bloğunu kaplar. Bunu okuldaki bir sıra bitişik dolap gibi düşünün. Her dolap yan yana olup aralarında boşluk yoktur.

Python ve Diziler

Esnekliği ve kullanım kolaylığıyla bilinen Python, dizilerle çalışmanın birçok yolunu sunar. Python diğer bazı diller gibi yerel dizi veri yapısına sahip olmasa da benzer şekilde çalışabilen ve hatta genişletilmiş yetenekler sunabilen güçlü alternatifler sunar.

İlk bakışta, Python'un listesi Bir diziyle eşanlamlı görünebilir ancak dikkate alınması gereken ince farklar ve nüanslar vardır:

Liste Dizi
Yerleşik bir Python veri yapısı Python'da yerel değil; 'array' modülünden geliyorlar
Dinamik boyut Sabit (önceden tanımlanmış) boyut
Farklı veri türlerindeki öğeleri tutabilir Aynı türdeki öğeleri tutun
Manipülasyon için bir dizi yerleşik yöntem sağlayın Harici modülleri içe aktarmanız gerekiyor
O(1) erişim işlemleri için zaman karmaşıklığı O(1) erişim işlemleri için zaman karmaşıklığı
Daha fazla bellek tüketin Daha verimli bellek

Bu tabloya bakınca doğal olarak şu soru geliyor: “Hangisi ne zaman kullanılmalı?”. Dinamik olarak büyüyüp küçülebilen ve karışık veri türlerini tutabilen bir koleksiyona ihtiyacınız varsa, Python'un listesi doğru yoldur. Ancak, aynı türdeki öğelerle bellek açısından daha verimli bir koleksiyon gerektiren senaryolar için Python'u kullanmayı düşünebilirsiniz. array modül veya NumPy gibi harici kütüphaneler.

The dizi Python'da modül

Çoğu geliştirici Python'da dizileri düşünürken genellikle listeleri düşünmeyi tercih eder. Ancak Python, yerleşik yapısı sayesinde daha özelleştirilmiş bir dizi yapısı sunar. array modülü. Bu modül, Python'da temel C tarzı veri türlerinin alan açısından verimli bir şekilde depolanmasını sağlar.

Python listeleri inanılmaz derecede çok yönlü olmasına ve her tür nesneyi depolayabilmesine rağmen bazen aşırıya kaçabilirler, özellikle de yalnızca tamsayılar veya kayan noktalı sayılar gibi temel veri türlerinden oluşan bir koleksiyonu depolamanız gerektiğinde. array modülü, belirli veri türleri için listelerden daha verimli bellek kullanan diziler oluşturmanın bir yolunu sağlar.

Dizi Oluşturma

Kullanmak için array modül, önce onu içe aktarmanız gerekir:

from array import array

İçe aktarıldıktan sonra, şunu kullanarak bir dizi oluşturabilirsiniz: array() yapıcı:

arr = array('i', [1, 2, 3, 4, 5])
print(arr)

İşte, 'i' argümanı dizinin imzalı verileri depolayacağını gösterir tamsayılar. Gibi başka tür kodlar da mevcuttur. 'f' şamandıralar için ve 'd' çiftler için.

Öğelere Erişim ve Değiştirme

Bir dizideki öğelere tıpkı listede olduğu gibi erişebilir ve bunları değiştirebilirsiniz:

print(arr[2]) 

Şimdi, değerini değiştirerek öğeyi değiştirelim. 6:

arr[2] = 6
print(arr) 

Dizi Yöntemleri

The array modül dizileri işlemek için çeşitli yöntemler sağlar:

  • append() – Dizinin sonuna bir öğe ekler:

    arr.append(7)
    print(arr) 
  • extend() – Yinelenebilir öğeleri sona ekler:

    arr.extend([8, 9])
    print(arr) 
  • pop() – Belirtilen konumdaki öğeyi kaldırır ve döndürür:

    arr.pop(2)
    print(arr) 
  • remove(): Belirtilen değerin ilk oluşumunu kaldırır:

    arr.remove(2)
    print(arr) 
  • reverse(): Dizinin sırasını tersine çevirir:

    arr.reverse()
    print(arr) 

Not: Burada listelediklerimizden daha fazla yöntem var. Bakın resmi Python belgeleri mevcut tüm yöntemlerin listesini görmek için array modülü.

süre array modül, temel veri türlerini depolamak için bellek açısından daha verimli bir yol sunar; sınırlamaları. Listelerden farklı olarak diziler homojen. Bu, dizideki tüm öğelerin aynı türde olması gerektiği anlamına gelir. Ayrıca yalnızca saklayabilirsiniz temel C tarzı veri türleri diziler halinde. Özel nesneleri veya diğer Python türlerini saklamanız gerekiyorsa bir liste veya başka bir veri yapısı kullanmanız gerekir.

NumPy Dizileri

Sayısal Python'un kısaltması olan NumPy, Python'daki sayısal hesaplamalar için temel bir pakettir. Temel özelliklerinden biri güçlü olmasıdır N boyutlu dizi nesnesiMatematiksel, mantıksal, şekil manipülasyonu ve daha fazlasını içeren diziler üzerinde hızlı işlemler sunan.

NumPy dizileri Python'un yerleşik dizilerinden daha çok yönlüdür array modüldür ve veri bilimi ve makine öğrenimi projelerinin temelini oluşturur.

NumPy Dizilerini Neden Kullanmalı?

aklıma gelen ilk şey performans. NumPy dizileri C dilinde uygulanır ve optimize edilmiş algoritmalar ve bitişik bellek depolamanın faydaları nedeniyle verimli bellek depolamasına ve daha hızlı işlemlere olanak tanır.

Python'un yerleşik listeleri ve dizileri tek boyutlu olmasına rağmen NumPy dizileri tek boyutlu olabilir. çok boyutlu, onları matrisleri veya tensörleri temsil etmek için ideal kılar.

En iyi uygulamalar, endüstri tarafından kabul edilen standartlar ve dahil edilen hile sayfası ile Git'i öğrenmek için uygulamalı, pratik kılavuzumuza göz atın. Googling Git komutlarını durdurun ve aslında öğrenmek o!

Son olarak NumPy şunları sağlar: geniş fonksiyon yelpazesi temel aritmetikten gelişmiş matematiksel işlemlere, yeniden şekillendirmeye, bölmeye ve daha fazlasına kadar bu diziler üzerinde işlem yapmak için.

Not: Verinin boyutunu önceden bildiğinizde, diziler için (özellikle NumPy'de) belleğin önceden tahsis edilmesi performans iyileştirmelerine yol açabilir.

NumPy Dizisi Oluşturma

NumPy'yi kullanmak için önce onu yüklemeniz gerekir (pip install numpy) ve ardından içe aktarın:

import numpy as np

İçe aktarıldıktan sonra, aşağıdaki komutu kullanarak bir NumPy dizisi oluşturabilirsiniz: array() işlevi:

arr = np.array([1, 2, 3, 4, 5])
print(arr) 

Ayrıca çok boyutlu diziler de oluşturabilirsiniz:

matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(matrix)

Bu bize şunları verecektir:

[[1 2 3] [4 5 6] [7 8 9]]

Dizi oluşturmanın bu temel yollarının yanı sıra, NumPy bize diziler oluşturmanın başka akıllı yollarını da sağlar. Bunlardan biri de arange() yöntem. Düzenli olarak artan değerlere sahip diziler oluşturur:

arr = np.arange(10)
print(arr) 

Bir diğeri ise linspace() Belirtilen sayıda öğeye sahip, belirtilen başlangıç ​​ve bitiş değerleri arasında eşit aralıklarla dizilmiş diziler oluşturan yöntem:

even_space = np.linspace(0, 1, 5)
print(even_space) 

Öğelere Erişim ve Değiştirme

NumPy dizisindeki öğelere erişmek ve bunları değiştirmek sezgiseldir:

print(arr[2]) arr[2] = 6
print(arr) 

Çok boyutlu diziler için hemen hemen aynısını yapıyoruz:

print(matrix[1, 2]) matrix[1, 2] = 10
print(matrix)

İkinci satırdaki öğenin değerini değiştirecek (indeks 1) ve üçüncü sütun (dizin 2):

[[1 2 3] [4 5 20] [7 8 9]]

Bir Dizinin Şeklini Değiştirme

NumPy, dizileri işlemek ve çalıştırmak için birçok işlev ve yöntem sunar. Örneğin, şunları kullanabilirsiniz: reshape() yöntemi bir dizinin şeklini değiştirme. Basit bir dizimiz olduğunu varsayalım:

import numpy as np arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
print("Original Array:")
print(arr) 

Ve bunu 3×4 matris olarak yeniden şekillendirmek istiyoruz. Tek yapmanız gereken reshape() İstenilen boyutların argüman olarak iletildiği yöntem:


reshaped_arr = arr.reshape(3, 4)
print("Reshaped Array (3x4):")
print(reshaped_arr)

Bunun sonucu:

Reshaped Array (3x4):
[[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]]

Matris Çarpımı

The numpy.dot() yöntem için kullanılır matris çarpımı. İki dizinin nokta çarpımını döndürür. Tek boyutlu diziler için iç ürün dizilerden. 2 boyutlu diziler için şuna eşdeğerdir: matris çarpımıve ND için bu bir toplam çarpım birinci dizinin son ekseni ve ikinci dizinin ikinciden sonuncusuna.

Nasıl çalıştığını görelim. Öncelikle iki 1 boyutlu dizinin nokta çarpımını (vektörlerin iç çarpımı) hesaplayalım:

import numpy as np vec1 = np.array([1, 2, 3])
vec2 = np.array([4, 5, 6])
dot_product_1d = np.dot(vec1, vec2) print("Dot product of two 1-D arrays:")
print(dot_product_1d) 

Bunun sonucu:

Dot product of two 1-D arrays:
32

32 aslında iki dizinin iç çarpımıdır – (14 + 25 + 3*6). Daha sonra iki 2 boyutlu dizinin matris çarpımını gerçekleştirebiliriz:


mat1 = np.array([[1, 2], [3, 4]])
mat2 = np.array([[2, 0], [1, 3]])
matrix_product = np.dot(mat1, mat2) print("Matrix multiplication of two 2-D arrays:")
print(matrix_product) 

Hangi bize verecek:

Matrix multiplication of two 2-D arrays:
[[ 4 6] [10 12]]

NumPy dizileri Python'un yerleşik listelerinden önemli bir adımdır ve array Modül, özellikle bilimsel ve matematiksel hesaplamalar için. NumPy kütüphanesinin sağladığı zengin işlevsellik ile birleşen verimlilikleri, onları Python'da sayısal işlemler yapmak isteyen herkes için vazgeçilmez bir araç haline getiriyor.

Sonuç

Bilgisayar bilimi ve programlamanın temel taşı olan diziler, çeşitli uygulama ve alanlarda değerini defalarca kanıtlamıştır. Python'da bu temel veri yapısı, listeler gibi çeşitli versiyonları aracılığıyla, array modülü ve güçlü NumPy dizileri, geliştiricilere verimlilik, çok yönlülük ve basitliğin bir karışımını sunar.

Bu kılavuz boyunca dizilerin temel kavramlarından Python'daki pratik uygulamalarına kadar yolculuk yaptık. Dizilerin, belleğe bitişik doğasıyla nasıl hızlı erişim süreleri sağladığını ve Python'un dinamik listelerinin nasıl ek bir esneklik katmanı sağladığını gördük. Ayrıca dizilerin sayısal hesaplama için güçlü araçlara dönüştüğü NumPy'nin özel dünyasına da girdik.

Zaman Damgası:

Den fazla Yığın kötüye kullanımı