Python

Python Listeler ve Demetler

Listeler(List) ve demetler(Tuple), muhtemelen Python’un en kullanışlı veri türleridir. Bunları hemen hemen her önemsiz Python programında bulursunuz.

İşte bu yazıda öğrenecekleriniz: Listelerin ve demetlerin önemli özelliklerini ele alacaksınız. Onları nasıl tanımlayacağınızı ve nasıl manipüle edeceğinizi öğreneceksiniz. Bitirdiğinizde, bu nesne türlerinin bir Python programında ne zaman ve nasıl kullanılacağına dair iyi bir fikir edinmiş olmalısınız.

Python Lists (Python Listeler)

Kısacası, bir liste, diğer birçok programlama dilindeki bir diziye biraz benzeyen, ancak daha esnek olan, isteğe bağlı nesnelerin bir koleksiyonudur. Listeler, Python’da, aşağıda gösterildiği gibi, virgülle ayrılmış nesne dizisini köşeli parantez ([]) içine alarak tanımlanır:

Çıktı:

Python listelerinin önemli özellikleri aşağıdaki gibidir:

  • Listeler sıralanır.
  • Listeler herhangi bir rastgele nesne içerebilir.
  • Liste elemanlarına indeks ile erişilebilir.
  • Listeler keyfi derinlikte iç içe yerleştirilebilir.
  • Listeler değişkendir.
  • Listeler dinamiktir.

Bu özelliklerin her biri aşağıda daha ayrıntılı olarak incelenmiştir.

Listeler Sıralanır

Bir liste yalnızca bir nesneler topluluğu değildir. Sıralı nesneler topluluğudur. Bir liste tanımlarken öğeleri belirttiğiniz sıra, o listenin doğuştan gelen bir özelliğidir ve bu listenin ömrü boyunca korunur.

Aynı öğeleri farklı bir sırayla içeren listeler aynı değildir:

Listeler Rastgele Nesneler İçerebilir

Bir liste, herhangi bir nesne çeşitliliğini içerebilir. Bir listenin öğelerinin tümü aynı türde olabilir:

Veya elemanlar çeşitli tiplerde olabilir:

Listeler, fonksiyonlar, sınıflar ve modüller gibi karmaşık nesneler bile içerebilir:

Bir liste, sıfırdan bilgisayarınızın belleğinin izin verdiği kadar çok sayıda nesne içerebilir:

(Tek nesneli bir listeye bazen tekli liste denir.)

Liste nesnelerinin benzersiz olması gerekmez. Belirli bir nesne bir listede birden çok kez görünebilir:

Liste Öğelerine Index Numaraları Tarafından Erişilebilir (Dizin Numarası ile Listelere Erişim)

Bir listedeki bireysel öğelere köşeli parantez içindeki bir index kullanılarak erişilebilir. Bu, bir dizgedeki tek tek karakterlere erişmeye tamamen benzer. Liste indeksleme, dizelerde olduğu gibi sıfır tabanlıdır.

Aşağıdaki listeyi göz önünde bulundurun:

İşte listedeki bazı öğelere erişim için gerekli kodlar:

Dize indeksleme ile ilgili hemen hemen her şey listeler için benzer şekilde çalışır. Örneğin, bir negatif liste dizini, listenin sonundan itibaren sayılır:

Dilimleme de çalışır. liste bir listeyse, a[m:n] ifadesi, a’nın m dizininden n dizinine kadar olan kısmını döndürür, ancak n dizinini içermez:

Dizi dilimlemenin diğer özellikleri, liste dilimleme için de benzer şekilde çalışır:

Hem pozitif hem de negatif indeksler belirtilebilir:

İlk dizini atlamak dilimi listenin başında başlatır ve ikinci dizini atlamak dilimi listenin sonuna kadar uzatır:

Negatif yada pozitif adım belirtebilirsiniz:

[:] sözdizimi listeler için çalışır. Ancak, bu işlemin bir liste ile nasıl çalıştığı bir string ile nasıl çalıştığı arasında önemli bir fark vardır.

mesaj bir dize ise, mesaj[:] aynı nesneye bir referans döndürür:

Yerleşik Fonksiyonların Listelerle Kullanılabilir

Çeşitli Python operatörleri ve yerleşik işlevler, stringlere benzer şekillerde listelerle de kullanılabilir:

in ve not in operatörü:

Birleştirme (+) ve çoğaltma (*) operatörleri:

len(), min(), max() ve sum()fonksiyonları:

Ayrıca sayısal türler ile kullanım:

Çıktı:

Dizilerin ve listelerin bu kadar benzer şekilde davranması tesadüf değildir. Her ikisi de yinelenebilir olarak adlandırılan daha genel bir nesne türünün özel durumlarıdır.

Bu arada, yukarıdaki örnekler üzerinde bir işlem yapılmadan önce liste her zaman bir değişkene atanır. Ancak bir liste değişmezi üzerinde de çalışabilirsiniz:

Listeler İç İçe Kullanılabilir

Listedeki bir elemanın her türden nesne olabileceğini gördünüz. Buna başka bir liste dahildir. Bir liste, alt listeler içerebilir, bunlar da alt listelerin kendisini içerebilir ve bu şekilde keyfi derinlikte devam edebilir.

Bu (kuşkusuz yapmacık) örneği düşünün:

Listelerde indexleri ile öğelere erişim sağladığımızı biliyorsunuz. Aynı şekilde bir index daha ekleyerek bir alttaki listeye erişim sağlayabiliriz.

Listelerin bu şekilde iç içe yerleştirilebileceği derinlik veya karmaşıklık konusunda bilgisayarınızın belleğinin kapsamı dışında bir sınır yoktur.

Endeksler ve dilimleme ile ilgili tüm olağan sözdizimi alt listeler için de geçerlidir:

Listelerin bu şekilde iç içe yerleştirilebileceği derinlik veya karmaşıklık konusunda bilgisayarınızın belleğinin kapsamı dışında bir sınır yoktur.

Ancak, operatörlerin ve fonksiyonları yalnızca belirttiğiniz düzeydeki liste için geçerli olduğunu ve özyinelemeli olmadığını unutmayın. len() kullanarak ornek uzunluğunu sorguladığınızda ne olduğunu düşünün:

ornek yalnızca beş öğeye sahiptir: üç dize ve iki alt liste. Alt listelerdeki tek tek öğeler, x’in uzunluğuna sayılmaz.

in operatörünü kullanırken benzer bir durumla karşılaşırsınız:

Listeler Değişebilir

Şimdiye kadar karşılaştığınız veri türlerinin çoğu atomik türlerdi. Örneğin tamsayı veya ondalık sayı, daha fazla bölünemeyen ilkel birimlerdir. Bu türler değişmezdir, yani atandıktan sonra değiştirilemezler. Bir tamsayının değerini değiştirmeyi düşünmek pek mantıklı değil. Farklı bir tamsayı istiyorsanız, farklı bir tamsayı atamanız yeterlidir.

Buna karşılık, dize türü bir bileşik türdür. Dizeler(String) daha küçük parçalara, yani bileşen karakterlerine indirgenebilir. Bir dizgedeki karakterleri değiştirmeyi düşünmek mantıklı olabilir. Ama yapamazsın. Python’da dizeler de değişmezdir.

Liste, karşılaştığınız ilk değiştirilebilir veri türüdür. Bir liste oluşturulduktan sonra, öğeler istendiğinde eklenebilir, silinebilir, kaydırılabilir ve hareket ettirilebilir. Python, listeleri değiştirmek için çok çeşitli yollar sunar.

Tek Liste Değerini Değiştirme

Listedeki tek bir değer, indeksleme ve basit atama ile değiştirilebilir:

Bir liste öğesi del komutuyla silinebilir:

Birden Çok Liste Değerini Değiştirme

Bir listedeki birkaç bitişik öğeyi aynı anda değiştirmek isterseniz ne olur? Python, aşağıdaki sözdizimine sahip dilim ataması ile buna izin verir:

Yine, şimdilik, yinelenebilir bir listeyi düşünün. Bu atama, belirtilen a dilimini ile değiştirir:

Eklenen öğelerin sayısının değiştirilen sayıya eşit olması gerekmez. Python, listeyi gerektiği gibi büyütür veya küçültür.

Tek bir öğenin yerine birden çok öğe ekleyebilirsiniz; yalnızca bir öğeyi belirten bir dilim kullanın:

Bunun, tek öğeyi bir listeyle değiştirmekle aynı şey olmadığını unutmayın:

Ayrıca hiçbir şeyi kaldırmadan bir listeye öğeler ekleyebilirsiniz. İstediğiniz dizinde [n:n] (sıfır uzunlukta bir dilim) biçiminde bir dilim belirtmeniz yeterlidir:

Uygun dilimi boş bir listeye atayarak birden fazla öğeyi listenin ortasından silebilirsiniz. Aynı dilimle del ifadesini de kullanabilirsiniz:

Bir Listenin Önüne ve Sonuna Öğeler Ekleme

Birleştirme operatörü veya += artırılmış atama operatörü kullanılarak bir listenin başına veya sonuna ek öğeler eklenebilir:

Bir listenin başka bir listeyle birleştirilmesi gerektiğini unutmayın, bu nedenle yalnızca bir öğe eklemek istiyorsanız, onu tek bir liste olarak belirtmeniz gerekir:

Listeyi Değiştiren Metotlar

Son olarak Python, listeleri değiştirmek için kullanılabilecek birkaç yerleşik yöntem sağlar. Bu yöntemlerle ilgili bilgiler aşağıda ayrıntılı olarak verilmiştir.

a.append(<obj>):

Listeye bir nesne ekler.

Unutmayın, liste yöntemleri hedef listeyi yerinde değiştirir. Yeni bir liste döndürmezler:

+ operatörü bir listeyi birleştirmek için kullanıldığında, hedef işlenen bir yinelenebilir öğe ise, öğelerinin bölündüğünü ve ayrı ayrı listeye eklendiğini unutmayın:

Çıktı:

.append() metodu bu şekilde çalışmaz! .append() içeren bir listeye yinelenebilir bir öğe eklenirse, tek bir nesne olarak eklenir:

Aşağıdaki gibi .append() ile bir dizeyi tek bir varlık ekleyebilirsiniz:

a.extend(<iterable>):

Yinelenebilir bir nesneden oluşan bir listeyi genişletir.

Evet, muhtemelen düşündüğünüz şey bu. .extend() ayrıca bir listenin sonuna ekler, ancak argümanın yinelenebilir olması beklenir. içindeki öğeler ayrı ayrı eklenir:

Başka bir deyişle, .extend(), + operatörü gibi davranır. Daha doğrusu, listeyi yerinde değiştirdiği için += operatörü gibi davranır:

a.insert(<index>, <obj>)

Listeye bir nesne ekler.

a.insert(<index>, <obj>) nesnesini belirtilen <index> ile a listesine ekler. Metot çağırldıktan sonra <obj> öğesi <index> konumuna eklenir.

a.remove(<obj>)

Listeden bir nesneyi siler.

a.remove(<obj>) listeden <obj> nesnesini siler. Eğer <obj> nesnesi yoksa hata fırlatır.

Olmayan nesneyi silmeye çalışırsanız hata fırlatır.

a.pop(index=-1)

Listeden bir eleman siler.

Bu yöntem, .remove() metodundan iki şekilde farklıdır:

Nesnenin kendisi yerine kaldırılacak öğenin dizinini belirtirsiniz.

  • Metot bir değer döndürür: kaldırılan öğe.
  • a.pop() basitçe listedeki son öğeyi kaldırır

Çıktı:

İsteğe bağlı <index> parametresi belirtilirse, o dizindeki öğe kaldırılır ve döndürülür. ,<index> dize ve liste indekslemede olduğu gibi negatif olabilir:

a.clear()

Liste içindeki değerleri temizler.

Python Tuples (Python Demetler)

Python, Tuple adı verilen sıralı bir nesne koleksiyonu olan başka bir tür sağlar.

Tuple’ları Tanımlama ve Kullanma

Tuple’lar, aşağıdaki özellikler dışında her bakımdan listelerle aynıdır:

  • Tuple’lar, elemanları köşeli parantez ([]) yerine parantez (()) içine alarak tanımlanır.
  • Tuple’lar değişmezdir.

Bir demet tanımını, indekslemeyi ve dilimlemeyi gösteren kısa bir örnek:

Asla korkma! Favori dizi ve liste tersine çevirme mekanizmamız, demetler için de çalışır:

Not: Gruplar parantez kullanılarak tanımlansa da, dizileri köşeli parantezler kullanarak indeksler ve dilimlersiniz, tıpkı diziler ve listelerde olduğu gibi.

Listeler hakkında öğrendiğiniz her şey – sıralanırlar, rastgele nesneler içerebilirler, dizine eklenebilirler ve dilimlenebilirler, iç içe yerleştirilebilirler – demetler için de geçerlidir. Ancak değiştirilemezler:

Neden liste yerine bir demet kullanırız?

  • Bir demeti değiştirirken programın yürütülmesi, eşdeğer liste için olduğundan daha hızlıdır. (Liste veya demet küçük olduğunda bu muhtemelen fark edilmeyecektir.)
  • Bazen verilerin değiştirilmesini istemezsiniz. Koleksiyondaki değerlerin programın ömrü boyunca sabit kalması amaçlanıyorsa, liste yerine bir Tuple kullanmak kazara değişikliğe karşı koruma sağlar.
  • Kısa bir süre sonra karşılaşacağınız ve bileşenlerinden biri olarak değişmez türden bir değer gerektiren sözlük adı verilen başka bir Python veri türü daha vardır. Bu amaç için bir demet kullanılabilir, oysa bir liste olamaz.

İster komut isteminde isterseniz değişkenler aracılığı ile birden fazla veriyi virgüller ile doğrudan bir demet olarak tanımlayabilirsiniz.

Python, girdiyi dolaylı olarak bir tanımlama grubu olarak yorumladığı için yanıtı parantez içinde görüntüler.

Tuple tanımıyla ilgili bilmeniz gereken bir özellik var. Boş bir demet veya iki veya daha fazla eleman içeren bir tanımlama grubu tanımlanırken hiçbir belirsizlik yoktur. Python, bir demet tanımladığınızı biliyor:

Ancak tek bir öğeyle bir demet tanımlamaya çalıştığınızda ne olur:

Yapma! Parantezler ifadelerde operatör önceliğini tanımlamak için de kullanıldığından, Python (15) ifadesini basitçe 15 tamsayı olarak değerlendirir ve bir int nesnesi oluşturur. Python’a gerçekten tek bir demet tanımlamak istediğinizi söylemek için, kapanış parantezinden hemen önce bir virgül (,) ekleyin:

Muhtemelen sık sık tekil bir demet tanımlamanız gerekmeyecek, ancak bir yolu olmalı.

Bir singleton demeti görüntülediğinizde, Python size bunun bir demet olduğunu hatırlatmak için virgül içerir:

Tuple Atama, Paketleme ve Paket Açma

Yukarıda gördüğünüz gibi, birkaç öğe içeren değişmez bir demet tek bir nesneye atanabilir:

Bu gerçekleştiğinde, demetteki öğeler nesneye “paketlenmiş” gibidir:

Bu “paketlenmiş” nesne daha sonra yeni bir demete atanırsa, bireysel öğeler demetteki nesnelere “paketlenir”:

Paketi açarken, soldaki değişkenlerin sayısı, tanımlama grubundaki değerlerin sayısıyla eşleşmelidir:

Bileşik bir atama yapmak için paketleme ve paketin açılması tek bir ifadede birleştirilebilir:

Python, genellikle bir demeti belirtmek için kullanılan parantezlerin dışarıda bırakılmasına izin verir:

Parantezler dahil edilmiş olsun veya olmasın aynı şekilde çalışır, bu yüzden gerekli olup olmadığına dair herhangi bir şüpheniz varsa, devam edin ve ekleyin.

Tuple ataması, tuhaf bir deyimsel Python parçasına izin verir. Sıklıkla programlama yaparken, değerlerini değiştirmeniz gereken iki değişkeniniz olur. Çoğu programlama dilinde, takas temp değişkeni ile sağlanırken python’da tuple ile iki değer değiştirilebilir.

Geçici bir değişken kullanarak değerleri takas etmek zorunda kalan herkesin bildiği gibi, bunu Python’da bu şekilde yapabilmek modern teknolojik başarının zirvesidir. Bundan daha iyisi asla olmayacak.

Sonuç

Bu yazı, Python listelerinin ve demetlerinin temel özelliklerini ve bunların nasıl değiştirileceğini ele aldı. Bunları Python programlamanızda kapsamlı bir şekilde kullanacaksınız.

Bir listenin başlıca özelliklerinden biri sıralı olmasıdır. Bir listedeki öğelerin sırası, o listenin içsel bir özelliğidir ve listenin kendisi değiştirilmedikçe değişmez. (Aynısı, değiştirilemez olmaları dışında, demetler için de geçerlidir.)

9 Yorum

Yorum yapmak için tıklayın