Python ile Veri Yapıları Yazı Serisinin İlk Bölümü
1 of 11
Downloaded 13 times
More Related Content
Python ile Veri Yapıları, Bölüm 1: Listeler
1. Python ile Veri Yapıları
Listeler
Selçuk Bozdağ
selcuk.bozdag@gmail.com
8 Aralık 2014
Python ile Veri Yapıları Listeler Selçuk Bozdağ
2. Giriş
Python harika bir programlama dili. Bu dili öğrenmek isteyenler, aslında günlük hayatlarında
karşılaştıkları bir problemi "pratik ve çevik" bir biçimde sonuç alarak çözmek isteyen
geliştiricilerdir. Gerçekten de bir sistem yöneticisi, bilimsel hesaplamalarla uğraşan bir
araştırmacı ya da bir oyun geliştiricisi, Python dilini son derece kullanışlı ve sonuca hızlı, kararlı ve
doğru götürdüğünü farketmişlerdir.
Bu öğretici derste de bilgisayar bilimlerinde kullanılan temel veri yapılarının Python ile pratik ve
etkili biçimde nasıl ele alındığı anlatılmıştır. Listeler, sözlükler, sekanslar, sabit listeler ve diğer
temel yapılar örneklerle açıklanmıştır.
Veri ve Modelleme
Veri Yapısı nedir, öncelike bu kavramı anlamaya çalışalım. Günlük hayattan bazı örnekler sunarak
giriş yapalım.
Düzenli insanların en beğenilen özelliklerinden birisi de mutlaka bir ajandaya sahip olmalarıdır.
Bu ajanda bazen bir defter, bazen de bir akıllı telefon uygulaması olabilir.
Önemli olan ne içerdiğidir. Her ajandada günlük olarak yapılacak işlerin bir listesi yer almaktadır.
İlk anahtar sözcüğü fark etmiş olabilirsiniz: liste.
Listeler, belirli bir sıralama gözetmeksizin ard arda eklenen verilerden oluşturulur.
– Faturaları öde
– Diş hekiminden randevu al
– Ders özetlerini gözden geçir
– Python öğrenmeye başla
gibi uzayan bir "Yapılacaklar Listesi" bilgiyi organize etmenin bir yoludur.
Python ile Veri Yapıları Listeler Selçuk Bozdağ
3. Bir başka organizasyon yöntemi ise telefon rehberlerinde yer alır. Her telefon numarasına karşılık
gelen bir kişi vardır.
– 110: Yangın
– 154: Alo Trafik
– 155: Polis İmdat
– 135: Uyandırma Servisi Telefonu
şeklinde bir sözlük oluşturabilirsiniz. Buradaki "sözlük" kelimesi, ikinci anahtar
kelimemizdir. Verileri bir "anahtar" ve "değer" ikilisiyle listeliyoruz.
Yukarıdaki iki örneği birleştirmek istersek, yapılacaklar listesinde, tarihleri anahtar olarak
kabul edebiliriz.
– 10.01.2015:
– Faturaları öde
– Diş hekiminden randevu al
– Ders Özetlerini gözden geçir
– Python öğrenmeye başla
– 11.01.2015:
– Sinemaya git
– Mutfak alışverişi yap
– Maketi tamamla
Bilgisayar bilimlerinde veri organizasyonu, amacınızı gerçekleştirmek ve algoritmalarınızı
beslemek için doğrudan etkisi olan öbekler anlamına geliyor.
Python ile Veri Yapıları Listeler Selçuk Bozdağ
4. Yukarıdaki örneklerde de gördüğünüz gibi üzerinde algoritmalarınızı uygulayabileceğiniz
zengin veri yapıları sayesinde programlarımızı oluşturabiliyoruz. Bu veri yapılarını birlikte
kullanarak, karmaşıklığı artan problemlere daha verimli ve etkili çözümler üretebiliyoruz.
İlerleyen alt bölümlerde Python programlama dilinde gerçekleştirilen veri yapılarını ve
kullanımlarını inceleyeceğiz.
Listeler
Liste, belki de en çok kullanılan veri yapısıdır. Değerler, birbiri ile virgülle ayrılarak köşeli
parantezler içerisinde gruplanırlar ve böylece bir listeye sahip olursunuz.
Aşağıdaki örneklerde bir takım listeler oluşturulmuştur.
>>> asal_sayilar = [1, 2, 3, 5, 7, 11, 13]
>>> yapilacaklar = [ 'Fatura Ode',
'Dis hekiminden randevu al',
'Ders Ozetlerini gozden gecir',
'Python ogrenmeye basla' ]
>>> harfler = ['p', 'y', 't', 'h', 'o', 'n']
Liste Elemanlarına Erişim
Python, üzerinde sıralı biçimde gezinilebilecek bir türe sahiptir. Bu türün adı "sequence"
olarak tanımlıdır. Türkçeye "sıra" olarak çevirilebilir. Adından da anlaşılabileceği gibi, eğer
"sequence" türünden bir veri yapısına sahipseniz, iki davranışa ya da metoda
sahipsinizdir. Her bir "sequence" türü __getitem()__ ve __len()__ metodlarını tanımlamak
zorundadır*.
O zaman ilk olarak, yukarıda tanımladığımız listelerin uzunluklarını öğrenelim.
Python ile Veri Yapıları Listeler Selçuk Bozdağ
5. >>> len(asal_sayilar)
7
>>> len(yapilacaklar)
4
>>> len(harfler)
6
Boş bir liste için len() fonksiyonu 0 değerini üretecektir.
>>> bos_liste = []
>>> len( bos_liste )
0
Liste elemanlarına erişmek için "[ ]" operatörünü
kullanabiliriz.
İlk elemana erişirken operatöre değer olarak 0
veririz. 0, değer olarak değil bir indeks olarak
algılanmalıdır. "Sıfırıncı liste elemanı" demek
aslında listedeki ilk eleman anlamına gelir.
İndeks, Türk Dil Kurumu sözlüğünde
"dizin" olarak tanımlanmış bir
kelime. "Birşeye endekslenmek"
olarak örnekler veriliyor. Sıfırın, ilk
elemana indekslenmesi; birin ikinci
elemana indekslenmesi diye devam
edebiliriz. Aslında indeks, işaret
etmektir. Verilen örnekleri dikkatlice
incelemenizi ve denemenizi
öneriyoruz.
>>> asal_sayilar[0]
1
En son elemana erişmek için ise index değeri
olarak "-1" kullanılabilir. Farklı yöntemler de vardır. Örneğin listenin uzunluğunun bir
eksiği de bize en son elemanın indeksini verecektir.
Python ile Veri Yapıları Listeler Selçuk Bozdağ
6. >>> asal_sayilar[-1]
13
>>> asal_sayilar[ len(asal_sayilar)-1 ]
13
Negatif indeks değerleri listenin sonundan itibaren erişimi sağlamaktadır. Örneğin "-1"
indeksi "sondan birinci eleman" yani en son eleman anlamına gelmektedir.
Python listelerinde, listenin belirli bir dilimini elde etmek de oldukça kolaydır ve son
derece kullanışlıdır. Bunun için "[:]" operatörünü kullanırız.
Bu dilimlerin her biri, İngilizcede "slice" olarak adlandırılır. Aşağıdaki ilk örneğinimizde
"harfler" listesinin ikinci, üçüncü ve dördüncü elemanlarını bir liste olarak
alıyoruz.
>>> harfler[1:4]
['y', 't', 'h']
Bu örnekte operatörümüze ilk parametre olarak başlangıç indeksini, ikinci parametre
olarak da bitiş indeksini sağlıyoruz. Bitiş indeksinin dışlayan olduğuna dikkat edelim.
Yani "4 numaralı indeks" değeri olan 'o' harfi, sonuç listesinde yer almamaktadır.
Dilimleme yaparken operatöre başlangıç ve bitiş değerlerinden birini verebilir ya da
hiçbirini sağlamayabilirsiniz.
Python ile Veri Yapıları Listeler Selçuk Bozdağ
7. >>> harfler[2:]
['t', 'h', 'o', 'n']
>>> harfler[:5]
['p', 'y', 't', 'h', 'o']
Elemanlara erişimde olduğu gibi, dilimleme yaparken de negatif değerler kullanabiliriz.
>>> harfler[-3:-1]
['h', 'o']
Yukarıdaki örnekte, sondan üçüncü eleman dahil olmak üzere, sondan birinci elemana
kadar ve sondan birinci eleman dahil olmamak üzere dilimleme yapılmıştır. Bununla
birlikte, sondan üçüncü elemandan itibaren son eleman dahil kalan elemanlar listesini
elde etmek için:
>>> harfler[-3:]
['h', 'o', 'n']
şeklinde erişmiş oluruz.
Python ile Veri Yapıları Listeler Selçuk Bozdağ
8. Listelerde Değişiklik Yapmak
Yeni Elemanlar Eklemek
Listelere eleman eklemek için "append" metodu kullanılır. Bu metod, parametre olarak
aldığı yeni elemanı listenin en sonuna ekler.
>>> asal_sayilar.append(17)
>>> asal_sayilar
[1, 2, 3, 5, 7, 11, 13, 17]
Dikkat çekici bir nokta ise, "append" metodunun çağrılmasının ardından yeni bir listenin
oluşmayışıdır. Bunun nedeni, listelerin "değiştirilebilir" olmasıdır.
Terminolojide bu tip nesnelere "mutable" nesneler adı verilir. Bunun tersi ise
"değiştirilemeyen" nesnelerdir ki, bu nesnenelere en iyi örnek "string" nesneleridir.
Değiştirilemeyen nesnelere terim olarak "immutable" nesneler denir. Literatür
taramalarında bu terimlerle sıkça karşılaşabilirsiniz.
Listenizi genişletmeniz de gereken bir durum olabilir. Başka bir listeyi, varolan listenize
dahil etmek isteyebilirsiniz. Bu durumda "extend" metodunu kullanabilirsiniz.
>>> sehirler = ['Ankara', 'Istanbul', 'Izmir']
>>> sehirler.extend( ['Adana', 'Bursa', 'Van'] )
>>> sehirler
>>> ['Ankara', 'Istanbul', 'Izmir', 'Adana', 'Bursa', 'Van']
Python ile Veri Yapıları Listeler Selçuk Bozdağ
9. Bir diğer kullanım durumu ise, listenin sonuna değil, belirli bir indeksin gösterdiği yere
eleman eklemek olabilir. Bunun için "insert" metodunu kullanabilirsiniz.
>>> yapilacaklar
['Fatura Ode', 'Dis hekiminden randevu al', 'Ders Ozetlerini gozden gecir',
'Python ogrenmeye basla']
>>> yapilacaklar.insert(2, 'Odevleri yap')
>>> yapilacaklar
['Fatura Ode', 'Dis hekiminden randevu al', 'Odevleri yap', 'Ders Ozetlerini
gozden gecir', 'Python ogrenmeye basla']
"insert" metodu iki parametre almaktadır. Birinci parametre, elemanın konumlanacağı
indeks değeridir. İkinci parametre ise yerleştirmek istediğiniz elemandır.
Listeden Eleman Silmek
Listeden silmek istediğiniz elemanın indeks değeriyle ya da kendisini kullanarak
silebilirsiniz. Birinci yöntem için "pop", ikinci metod için "remove" metodunu
kullanabilirsiniz. Öncelikle "pop" metodunun kullanımını inceleyelim. Tahmin ettiğiniz
üzere bir indeks parametresi bekliyor. Ancak, "pop" metodunun parametre beklemediği
bir durumda var. Bu durumda da, listedeki en son elemanı siliyor. "pop" metodunu
kullanırken, geri döndürdüğü değerin silinen eleman olduğunu da belirtelim. Aşağıdaki
örnekte bir meyve tabağındaki meyvelerin isimlerini
elemanlar olarak kullanarak, silme işlemlerimizi gerçekleştireceğiz.
Python ile Veri Yapıları Listeler Selçuk Bozdağ
10. >>> meyveler = ['Elma', 'Kivi', 'Portakal', 'Uzum', 'Muz']
Bu meyve listesinden "Kivi" elemanını "pop" metodu silmek için indeks değeri olan "1"
kullanılır.
>>> meyveler.pop(1)
'Kivi'
>>> meyveler
['Elma', 'Portakal', 'Uzum', 'Muz']
Parametre olmaksızın "pop" metodunu kullanmak istediğimizde ise en son eleman olan
"Muz" silinecektir. "pop" metodunun yeni bir liste döndürmediğini, varolan listede
değişiklik yaptığını tekrar hatırlatmak yerinde olacaktır.
>>> meyveler
['Elma', 'Portakal', 'Uzum', 'Muz']
>>> meyveler.pop()
'Muz'
>>> meyveler
['Elma', 'Portakal', 'Uzum']
Python ile Veri Yapıları Listeler Selçuk Bozdağ
11. “remove” metodu ise “pop” metodundan farklı çalışmaktadır. Parametre olarak silinecek
elemanın kendisini almaktadır. Silinecek eleman, liste içerisinde birden fazla yerde
olabilir. Bu nedenle “remove” metodu, listede değeri ilk bulduğu elemanı siler.
>>> meyveler = ['Elma', 'Portakal', 'Muz', 'Limon']
>>> meyveler.remove('Limon')
>>> meyveler
['Elma', 'Portakal', 'Muz']
>>>
Bölüm Sonu
Bu bölümde başlangıç seviyesinde, temel veri yapılarından söz ettik. Bölümün konusu
olan listeler ile ilgili de yine temel seviyede bilgiler vermeye çalıştık.
Bir sonraki bölümde “sözlük” kullanımı ve sözlükler üzerinde Python metodlarının nasıl
çalıştığını göstermeye çalışacağız.
Python ile Veri Yapıları Listeler Selçuk Bozdağ