Python Veri Koleksiyon Tipleri(List, Tuple, Set, Dict )

Python Veri Tipi Koleksiyonları

Konumuza geçmeden önce belirtmek istediğim ufak bir not var. Kullandığım editörden kaynaklı kod parçalarında boşluk hassasiyetini tam olarak gösteremiyorum. Bundan dolayı lütfen kendi kodlarınızda Python dilindeki whitespace (boşluk bırakma) zorunluluğunu ihmal etmeyiniz.
Pythonda 4 farklı veri tipi koleksiyonu vardır. Bu koleksiyonların her birinin kendine özel özellikleri vardır. Listeleri işlemeye geçmeden önce bu farkları inceleyelim.

List: Listeler sıralı ve değiştirilebilir koleksiyonlardır. Duplicate özellikleri vardır (aynı elemandan 2 tane bulunması)

Tuple: Tupleler sıralı ancak değiştirilemezdir. Duplicate özellikleri vardır.

Set: Setler (kümeler) sıralı olmayan ve indexlenemeyen koleksiyon tipidir. Duplicate özelliği yoktur.

Dictionary: Dictler sıralı olmayan ve değiştirilebilir veri tipidir. Duplicate özellikleri yoktur.

Python Lists

Daha önceki yazımda Python’da listeler konusuna giriş yapmıştık. Ancak döngüleri ve koşulları daha görmediğimiz için listelere, ve diğer veri tiplerine (tuple,dict) daha sonra devam edeceğimi belirtmiştim.

Öncelikle eğer bir listeyi döngü aracılığı ile bastırmak istersek,

my_list = ["elma", "armut", "muz"]
for x in my_list:
  print(x)

C dilinde arraylerde indexe göre ilerleme yapabildiğimiz gibi Python’da listelerde de indexe göre bastırabiliyoruz,

my_list = ["elma", "armut", "muz"]
for i in range(len(my_list)):
   print(my_list[i])

Yukarıdaki kullanımı while döngüsü ile de yapabiliriz,

i = 0
while i < len(my_list):
   print(my_list[i])
i = i + 1

Döngüleri kullanarak listeleri daha detaylı bastırabiliriz,

new_list = []

for x in my_list:
if "a" in x:
newlist.append(x)

print(new_list)

Yukarıdaki kullanımda my_list adlı listemizdeki meyvelerin içerisinde “a” harfi olan elemanları yeni listemize ekle anlamı taşıyor. Kullanımı daha kısa şekilde yazmamız da mümkün,

new_list = [x for x in my_list if "a" in x]
print(new_list)

Koşullardan da faydalanıp yukarıdaki kullanımı istediğiniz gibi zenginleştirebilirsiniz,

new_list = [x for x in my_list if x != "elma"]

Belirli range aralığında sayıları for döngüsü ile bastırabiliyorduk. Aynı şeyi de listeye ekleyebilmek için yapabiliriz,

new_list = [x for x in range(10) if x < 5]

Bir listeden başka bir listeye kopyalama yaparken, istemediğimiz elemanın yerine default bir değer koyabiliriz,

new_list = [x if x != "elma" else "portakal" for x in my_list]

Yukarıdaki kullanımda dediğimiz şey, eğer x elma değil ise geri döndür, eğer elma ise portakal döndür. Yani bu durumda elma yerine portakal bastırılacaktır.

my_list adlı listemiz yalnızca string değer içeren meyvelerden oluşuyor. Eğer bu listemizi alfabetik olarak sıralamak istersek sort metodundan faydalanabiliriz.

my_list.sort()
print(my_list)

Eğer listemiz integer değerlerden oluşsaydı küçükten büyüğe sıralamak için de aynı fonksiyonu kullanabilirdik.

Listemizi alfabetik olarak veya küçükten büyüğe sıraladık ancak
büyükten küçüğe, veya alfabenin tersinden sıralamak isteseydik, sort fonksiyonunun reverse özelliğini değiştirerek bunu kolaylıkla yapabilirdik,

my_list.sort(reverse = True)

Sort fonksiyonunu key özelliği sayesinde değiştirebilirsiniz.

def my_sort(n):
return abs(n-50)

number_list= [100,50,65,82,23]
number_list.sort(key = myfunc)
print(number_list)

Yukarıdaki kodun anlamı 50 ye en yakın olan elemanlar öncelikli bir şekilde sıraladır.

Eğer bir listeyi diğer listeye kopyalamak istersek,

list1 = ["a", "b", "c"]
list2 = list1.copy()

şeklinde kopyalayabiliriz.

Farklı bir yol olarak list metodunu kullanarak da kopyalayabiliriz.

list2 = list(list1)

list2 = list1 şeklinde bir kopyalama yapamazsınız. Çünkü eğer bu kullanım ile kopyalamaya çalışırsanız list2, list1 adlı listenin referansı olacaktır yani, list1’deki herhangi bir değer değiştiğinde list2’de de değişecektir.

İki listeyi birbirine bağlamak istersek,

list3 = list1 + list2

şeklinde bağlayabiliriz.

Append fonksiyonunu kullanarak da iki listeyi bağlayabilirdik,

for x in list2:
   list1.append(x)

döngü kullanmadan yapmanın başka bir yolu ise extend fonksiyonudur,

list1.extend(list2)

Tuple

Python dilinde verileri saklamak için kullanılan bir başka veri tipi ise tupledir.

Tuple listelerden farklı olarak sıralanmış ve değiştirilemezdir. Ek olarak tupleler () şeklindeki parantezler ile tanımlanırlar.

my_tuple = ("elma", "armut", "muz")
  • Tuple elemanları aynı olabilirler,
  • Tuple elemanlarının sayısını bulabilmek için len fonksiyonunu kullanabiliriz.
  • Tek elemanlı tuple oluşturmak isterseniz oluşturduğunuz elemandan sonra “,” virgül koymanız gereklidir. Yoksa python bunun tuple olup olmadığını anlayamaz.
  • Listelerde olduğu gibi tuplelerde farklı veri tipleri bulunabilir, type fonksiyonu ile değişken tiplerini kontrol edebiliriz.
  • Tupleler değiştirilemez oldukları için ekleme veya silme yapılamaz.
  • Yazının sıkıcı olmaması için listelerde yaptığımız birleştirme, bastırmak (print) gibi fonksiyonlar tuplelerde de oldukça benzer olduğu için aynı şeyleri eklemiyorum.
  • Maddelerdeki farkları bilmeniz yeterli olacaktır.

Bir tuple nasıl açılır ? (Unpack)

(fruit1, fruit2, fruit3) = my_tuple

print(fruit1)
print(fruit2)
print(fruit3)

Bir tupleyi açarken ne kadar içerik varsa o kadar
parametre gönderilmelidir. Eğer tuple içeriğinden daha az parametre gönderilmek isteniyorsa,

(*fruit1, fruit2)

şeklinde de gönderebilirsiniz. *fruit1 bastırıldığında 2 elemanı listeye alacaktır.

Bir tupleyi 2 ile çarpıp bir listenin içerisine ekleyebilirsiniz,

new_tuple = my_tuple * 2

Tupleler için unchangeable (değiştirilemez) olduğunu söylemiştik, bir tupleyi listeye çevirip, listeye güncelleme yapılıp sonra listeyi tupleye çevirip tekrardan tuplemizi güncelleyebiliriz.

temp_list = list(my_tuple)
temp_list.append("Portakal")
my_tuple = tuple(temp_list)

Sets

Set koleksiyon tipi curly bracket kullanılarak tanımlanır.

my_set = {"elma", "armut", "muz"}
  • Setlerin duplicate özelliği yoktur,
  • Setler değişmezdir, ancak yeni elemanlar eklenebilir.
  • Farklı veri tiplerini içerebilir,
  • Setler sıralanabilir değildir.

Bir sete eleman eklemek isterseniz,

my_set.add("cilek")

şeklinde ekleyebilirsiniz.

Bir başka setten diğer bir sete eleman eklemek için update metodunu kullanabilirsiniz,

new_set = {"portakal","cilek","kivi"}
my_set.update(new_set)

update metodunu diğer koleksiyon tipleri için de kullanabilirsiniz (list, dict, tuple)

Bir setten eleman silmek isterseniz,

my_set.remove("elma")

şeklinde silebilirsiniz.

clear metodu ile birlikte bir setin içerisini boşaltabilirsiniz,

my_set.clear()

del anahtar kelimesi ile birlikte tamamen setinizi silebilirsiniz,

del my_set

Döngüler kullanarak setlerinizi bastırabilirsiniz,

for x in my_set:
   print(x)

union metodu ile birlikte 2 kümeyi birleştirebilirsiniz,

my_set3 = my_set1.union(my_set2)

Eğer aktardığınız sette yalnızca tekrarlanan elemanların olmasını istiyorsanız intersection_update metodunu kullanabilirsiniz,

x_set = {"apple", "windows", "linux"}
y_set = {"google", "microsoft", "apple"}
x.intersection_update(y)

yukarıdaki metodu kullandıktan sonra x_set kümesini bastırdığımızda yalnızca tekrarlanan apple stringi olacaktır.

Eğer intersection_update metodunun tam tersi durumu yani tekrarlanan elemanlar hariç diğer elemanların olduğu bir liste yapmak istiyorsanız symmetric_difference_update() metodunu kullanabilirsiniz,

x.symmetric_difference_update()

Eğer 3. bir sete ilk iki seti symmetric metodu ile aktarmak isterseniz,

z_set = x.symmetric_difference(y)

Not: Set koleksiyonlarında dikkatinizi çeken nokta matematikteki kümeler konusu ile oldukça benzer metot isimleri içermesidir. Oluşturduğunuz her bir seti küme olarak düşünmeniz gerekli.

Dictionary

Dictionary koleksiyon tipi sıralı olmayan, değiştirilebilen ve duplicate özelliği olmayan bir koleksiyon tipidir.
Eğer programlama hakkında başka dillerde kodlama yaptıysanız bu koleksiyon tipinin rahatlıkla mapler olduğunu görebilirsiniz. Maplerde olduğu gibi key = value şeklinde tanımlamalar yapıyorsunuz.
Bir dict tanımlamak istiyorsanız,

my_book_dict = {
"name" : "Sherlock Holmes",
"year" : "1967",
"series" : "Asla Şüphe Uyumaz",

}

oluşturduğunuz dictionary koleksiyon tipini bastırmak için ise,

print(my_book_dict["name"])

şeklinde bir özelliğini bastırabilirsiniz.

Dictionary elemanlarına erişebilmek için,
yukarıdaki print fonksiyonundaki kullanımın yanı sıra get metodunu da kullanabilirsiniz,

bookname = my_book_dict.get("name")

Bir dictionary koleksiyonundaki keyleri yani (örneğin oluşturduğumuz my_book_dict mapindeki “name” keyi) keys metodunu kullanabilirsiniz,

x = my_book_dict.keys()

Bir dictionary için yeni eleman eklemek isterseniz,

my_book_dict["page_number"] = "120"

Aynı keys değişkenlerini bastırabildiğimiz gibi, values değişkenlerini de values metodu ile bastırabiliriz.

x = my_book_dict.values()

items metodu ile birlikte mapinizin hem key hem de value değerlerini bastırabilirsiniz,

x = my_book_dict.items()

Koşullar ile birlikte bir dictionaryinin içindeki herhangi bir keyi sorgulayabilirsiniz,

if "name" in my_book_dict:
   print("Yes it contains name")

Dictionaryinin key veya value özelliğini değiştirebilmek için direk olarak değiştirmeden farklı olarak update metodunu da kullanabiliriz,

my_book_dict.update({"page_number" : 368})

Update metodu ile birlikte, yukarıdaki kullanıma benzer olarak yeni key=value değerleri de ekleyebilirsiniz.

Eğer bir elemanı silmek isterseniz pop fonksiyonunu kullanabilirsiniz, eğer random şekilde bir elemanı silmek isterseniz popitem fonksiyonunu kullanabilirsiniz,

my_book_dict.pop("name")

my_book_dict.popitem() # random

del metodu ile birlikte dictionaryinizdeki herhangi bir elemanı silebilirsiniz ancak dikkat olmanız gerekli herhangi bir key değeri vermediyseniz bütün mapiniz silinebilir.

del my_book_dict["name"]

oluşturduğunuz mapin içeriğini boşaltmak isterseniz de clear metodunu kullanabilirsiniz.

Döngüler aracılığı ile keyleri bastırmak isterseniz,

for x in my_book_dict:
   print(x)

Eğer tüm valueleri bastırmak isterseniz index kullanımı ile bastırabilirsiniz,

for x in my_book_dict:
  print(my_book_dict[x])

yukarıdaki kullanımların yanı sıra values ya da keys metodunu da kullanabilirdik,

for x in my_book_dict.values():
  print(x)

eğer key ve value değerlerinin ikisini de aynı anda bastırmak istiyorsanız items() metodunu kullanmalısınız,

for x,y in my_book_dict.items()
print(x,y)

Bir dictionaryi diğer dictionarye dict1 = dict2 şeklinde aynı listelerde olduğu gibi kopyalayamayız, kopyalama işlemlerini yapabilmek için copy metodunu kullanabilirsiniz,

new_dict = my_book_dict.copy()

ya da,

new_dict = dict(my_book_dict)

şeklinde kopyalayabilirsiniz.

İç içe (nested) mapler de oluşturabilirsiniz.

my_family_dict = {
"child1" : {
"name" : "Emil",
"year" : 2004
},
"child2" : {
"name" : "Tobias",
"year" : 2007
},
"child3" : {
"name" : "Linus",
"year" : 2011
}
}

Yukarıdaki örnekte, my_family_dictinin keylerinin de bir dict olduğunu rahatlıkla görebilirsiniz.

Bir yazının daha sonuna gelmiş bulunmaktayız, artık Python dilindeki giriş kısmımızı tamamlamış bulunuyoruz. Artık bundan sonraki yazılarımda Python dilinde OOP (Nesne Yönelimli Programlama)
üzerinden ilerleyeceğiz.