Python Veri Yapıları

Merve Tatlıdil
Data Runner
6 min readJun 24, 2020

--

Herkese merhabalar! Bu haftaki yazı konum Python Veri Yapıları. Bir programlama dilini öğrenmeye başladığımızda en başta öğrenmemiz gereken konuların başında veri yapıları gelir.

Değişkenler, farklı veri türleri için değerleri tutmak amacıyla kullanılır. Değişkenler bir değeri tutan programlama dillerinin en küçük yapı taşıdır. Değişkenler integer, float, boolean ve string tiplerinde olabilir. Python dinamik olarak yazılan bir dil olduğundan, değişkenin türünü tanımlamanız gerekmez. type () fonksiyonunun yardımıyla, değişkenin türünü bulabilirsiniz.

x = 24
y = 16.7
z = "Data Science"
print(type(x))
print(type(y))
print(type(z))
<class 'int'>
<class 'float'>
<class 'str'>
t = True
type(t)
>>bool

Burada veri yapılarını anlatmadan string’ler konusunda bir parantez açmak gerekli. Bir string, tırnak işaretlerinde temsil edilen bir karakter dizisi olarak tanımlanır. Python’da, bir string(dize) tanımlamak için tek, çift veya üçlü tırnak kullanabilirsiniz. String’lerin çok fazla hazır fonksiyonu bulunuyor.

len( ) dizinin kaç karakterden oluştuğunu söyler.

index( ) içerisine parametre olarak aldığı karakteri string üzerinde arar ve indisin değerini döndürür.

split( ) karakter dizisinde belirtilen bir karaktere göre parçalama işlemi yapar.

z = "Data Science"
len(z) #boyut
>>12
z.index('S') # s kaçıncı index'te?
>>5
z.split(' ')
>>['Data', 'Science']

strip( ) karakter dizisinin baş ve sondaki boşluk karakterlerini siler.

replace( ) metodu karakter güncellemesi için kullanılır.

s = '          Machine Learning            '
s.strip()
>>'Machine Learning'
a = "Python Programming Language"
a = a.replace("Python","Java")
a
>>'Java Programming Language'

find ( ) metodu verilen string ifade içinde arama yapar ve bulduğu ilk indeks numarasını döndürür. Eğer bulamazsa exception döndürür.

b = z.find("Science")
print(b)
>>5

partition( ) diziyi ön ek, ayırıcıları ve son ek olmak üzere böler.

join ( ) string’leri birleştirmek için kullanılır. Join fonksiyonu başında bulunan parametreyi string’lerin arasına koyarak birleştirme yapar.

str1 = 'Batman'
str2 = 'The Dark Knight'
str3 = ' '.join([str1,str2])
str3
>>'Batman The Dark Knight'

String’ler “+” operatörü ile de birleştirilebilir.

str4 = 'Computer'
str5 = 'Engineer'
str4 + str5
>>'ComputerEngineer'

Veri yapıları ise temelde bazı verileri bir arada tutabilen yapılardır. Başka bir deyişle, ilgili verilerin bir koleksiyonunu saklamak için kullanılırlar.

Python’da en yaygın kullanılan veri yapıları : List(Liste), Dict, Tuple, Set

1. List (Liste)

  • Değişebilen elemanlardan oluşur.
  • Diğer programlama dillerinde array’e benzer olsa da tek bir veri tipinden oluşmadığı için Python’da başka bir anlam ifade etmektedir. Burada ne demek istiyorum? Örneğin Java dilinde bir array oluşturduğumuzda içine hepsi integer olan ya da hepsi string olan veri tipleri ekleyebiliriz. Python’da ise bir listede string, integer, float ,boolean veri tipleri aynı anda bulunabilir.
myList = [ "hello" , "world", 4 ]  #liste oluşturma
myList[1] #İsteğimiz elemana erişmek için index kullanırız
>>'world'
fruits = ["apple", "banana", "cherry", "orange", "kiwi", "melon", "mango"]
print(fruits[2:5]) #2'den 5'e kadar olan elemanları aldık
>>['cherry', 'orange', 'kiwi']
print(fruits[:4]) #4'ten önceki elemanları aldık
>>['apple', 'banana', 'cherry', 'orange']
fruits[1] = "blackcurrant"
print(fruits) #1.index'e yeni eleman ekledik.1 index değişti.
>>['apple', 'blackcurrant', 'cherry', 'orange', 'kiwi', 'melon', 'mango']
print(len(fruits)) #listenin boyutu
>>7
  • Listeye eleman ekleme append( ) metodu ile yapılır.
fruits.append("banana") #eleman en sona eklendi.
print(fruits)
>>['apple', 'blackcurrant', 'cherry', 'orange', 'kiwi', 'melon', 'mango', 'banana']
fruits.insert(1, "apple") #Elemanı 1.indexe eklemek istersek
fruits
>>['apple',
'apple',
'blackcurrant',
'cherry',
'orange',
'kiwi',
'melon',
'mango',
'banana']
fruits[0] = 'Strawberry' #Eleman Değiştirme
fruits
>>['Strawberry',
'apple',
'blackcurrant',
'cherry',
'orange',
'kiwi',
'melon',
'mango',
'banana']
del fruits[2] #Eleman Silme
fruits
>>['Strawberry', 'apple', 'cherry', 'orange', 'kiwi', 'melon', 'mango', 'banana']
fruits = fruits + [6, 7] #listeyi genişlettik
fruits
>>['Strawberry',
'apple',
'cherry',
'orange',
'kiwi',
'melon',
'mango',
'banana',
6,
7]
fruits.extend([1, 2]) #yukarıdaki işlemi fonksiyon ile yapmak istersek
fruits
>>['Strawberry',
'apple',
'cherry',
'orange',
'kiwi',
'melon',
'mango',
'banana',
6,
7,
1,
2]
  • Liste üzerinde pop, reverse ve sort gibi stack fonksiyonları kullanmak istersek :
sayılar = [1, 2, 3, 4, 5, 6, 7] # pop () fonksiyonu ek sondakini çıkardı
sayılar.pop()
>>7
sayılar
>>[1, 2, 3, 4, 5, 6]
sayılar.reverse() #listeyi ters çevirir
sayılar
>>[6, 5, 4, 3, 2, 1]
sayılar2 = [4,2,7,9,0,1,5,3] #sayılar2'yi sıralamak istersek
sayılar2.sort()
sayılar2
>>[0, 1, 2, 3, 4, 5, 7, 9]
sayılar3 = sayılar2.copy() #sayılar2'yi yeni bir değişkene kopyalamak istersek
print(sayılar3)
>>[0, 1, 2, 3, 4, 5, 7, 9]
sayılar3.clear() #Tüm öğeleri listeden kaldırır
print(sayılar3)
>>[]
x = sayılar2.count(5) #Belirtilen değere sahip öğelerin sayısını döndürür
print(x)
>>1
y = sayılar2.index(7) #7 sayısı kaçıncı indexte?
print(y)
>>6
sayılar2.remove(3) #Belirtilen değere sahip öğeyi kaldırır
sayılar2
>>[0, 1, 2, 4, 5, 7, 9]

2. Dictionary(Sözlükler)

  • Dictionary diğer dillerdeki hash ya da map veri yapılarına benzetilebilir. Bir sözlük anahtar(key) : değer(value) çiftlerinden oluşur. Bir anahtar sözlükte sadece bir defa bulunabilir.
  • Sözlüklerin içindeki anahtar-değer ikililerine item adı verilir.
dict = {1:'John', 2:'Rachel', 3:'Nancy', 4:'Daniel'}
print("1st name is "+dict[1])
print (dict.keys())
print (dict.values())
>>1st name is John
dict_keys([1, 2, 3, 4])
dict_values(['John', 'Rachel', 'Nancy', 'Daniel'])
m = dict[1]
m
>>'John'
n = dict.get(1) #get() metodu da aynı sonucu verir
n
>>'John'
dict[2] = 'Monica' # key değeri 2 olan 1.indexin değerini değiştirdik
dict
>>{1: 'John', 2: 'Monica', 3: 'Nancy', 4: 'Daniel'}
dict[5] = "Jane" #yeni bir item eklemek istersek
print(dict)
>>{1: 'John', 2: 'Monica', 3: 'Nancy', 4: 'Daniel', 5: 'Jane'}
dict.pop(3) #item silmek istersek
print(dict)
>>{1: 'John', 2: 'Monica', 4: 'Daniel', 5: 'Jane'}

3. Tuple(Demet)

  • Tuple, üzerinde değişiklik yapamadığımız liste olarak düşünülebilir.
  • Değiştirilemez oldukları için uzunlukları sabittir.Dolayısıyla append(), remove(), pop() gibi metodlar demet yapısında yoktur.
  • Değişmeyecek verilerimiz varsa demetleri tercih etmeliyiz, çünkü listelerden çok daha hızlıdır.
  • Listeleri tanımlarken köşeli parantez [] kullanıyorduk. Demette ise normal parantez () kullanılır
  • Bir tuple’ı büyütmek ya da küçültmek istiyorsak yeni bir tuple oluşturmak zorundayız.
zoo = ('python', 'elephant', 'penguin') #bir tuple tanımladık
print('Number of animals in the zoo is', len(zoo)) #boyut
>>Number of animals in the zoo is 3
print(zoo[1]) #1.index
>>elephant
print(zoo[-1]) #negatif index'e bakmak istersek
>>penguin
#burada -1 değerinin bize en sondaki 'penguin' sonucunu vermesinin nedenini şöyle düşünebiliriz. 0.index 'python' karşılığını veriyordu. 1.index 'elephant' 2.index ise 'penguin' değerini verecek.Yani index sayısı artarak sağa doğru ilerliyor.O zaman -1.index istendiğinde en son değeri vermesi mantıklıthistuple = ("apple", "banana", "cherry", "orange", "kiwi", "melon", "mango")
print(thistuple[-4:-1])
>>('orange', 'kiwi', 'melon')
# -4 -> "orange"
# -3 -> "kiwi"
# -2 -> "melon"

Bir demet oluşturulduktan sonra değerini değiştiremeyeceğimizi söylemiştik. Ancak bir çözüm var. Diziyi bir listeye dönüştürebilir, listeyi değiştirebilir ve listeyi tekrar bir diziye dönüştürebiliriz.

fruituple = ("apple", "banana", "cherry")
newtuple = list(fruituple)
newtuple[1] = "kiwi"
fruituple= tuple(newtuple)
print(fruituple) #bu şekilde bir tuple üzerinde değişiklik yapabiliriz.
>>('apple', 'kiwi', 'cherry')
fruituple[3] = "orange" #tuple değiştirilemez demiştik.yeni eleman eklemek istersek kod hata verecektir.
print(fruituple)
>>TypeError Traceback (most recent call last)
<ipython-input-51-4751cbf5cb80> in <module>
----> 1 fruituple[3] = "orange" #tuple değiştirilemez demiştik.yeni eleman eklemek istersek kod hata verecektir.
2 print(fruituple)

TypeError: 'tuple' object does not support item assignment
my_tuple=(1,4,3,4,5,6,7,4) #tuple'ın sahip olduğu fonksiyonlar
print('Index:', my_tuple.index(4), "\n")
print('Count:', my_tuple.count(4))
>>Index: 1

Count: 3

4. Set

  • Python’daki set veri yapısı, matematiksel küme işlemlerini desteklemek için uygulanmıştır.Değişmez nesnelerden oluşmaktadır. Bir küme üzerinde bulunan bir nesnede değişiklik yapamayız.Aynı şekilde bir Set koleksiyonuna aynı elemanı ekleyemezsiniz.
  • Matematiksel kullanım durumlarıyla, bu veri yapısı çoğunlukla listedeki kopyaları bulmak için kullanılır, çünkü listeyi set () işlevini kullanarak bir kümeye dönüştürmek kopyaları listeden kaldırır :
listA = [1,2,3,1,5,2] #listeyi set () işlevini kullanarak bir kümeye dönüştürmek istersek
setA = set(listA)
setA
>>{1, 2, 3, 5}
setA.update([7, 8, 9, 10]) #güncelleme yaparız
setA
>>{1, 2, 3, 5, 7, 8, 9, 10}
setA.add("orange") #ekledik
print(setA)
>>{1, 2, 3, 5, 7, 8, 9, 10, 'orange'}
setA.remove("orange") #silme işlemi yaptık
print(setA)
>>{1, 2, 3, 5, 7, 8, 9, 10}

Python’da iki veya daha fazla kümeyi birleştirmenin birkaç yolu vardır. Bunlardan biri union() metodudur.

set1 = {"a", "b" , "c"} #union ile birleştirme 
set2 = {1, 2, 3}
set3 = set1.union(set2)
print(set3)
>>{1, 2, 3, 'a', 'b', 'c'}
set1.update(set2) #update ile birleştirme
print(set1)
>>{1, 2, 3, 'a', 'b', 'c'}
set4 = set(['one', 'two', 'three', 'four' ])
set5 = set(['two', 'five', 'one' , 'seven' , 'three' ])
set6 = set.intersection(set4, set5) #set4^set5

set7 = set.difference(set4, set5) #set4- set5
set8 = set.union( set4, set5) # set4 | set5set6 #küme kesişimleri
>>{'one', 'three', 'two'}
set7 #set4 kümesinin set5 kümesinden farkı
>>{'four'}
set8 #küme birleşimi
>>{'five', 'four', 'one', 'seven', 'three', 'two'}

Sağlıkla ve veriyle kalın!

Kodlara https://github.com/mrw-ttldl/Medium_Yazilarinin_Kodlari linkinden ulaşabilirsiniz.

--

--