Python Listesi Veri Yapısını Öğrenin - Bölüm 1


Veri Yapısı, veri türleri, bunlar arasındaki ilişkiler ve verilere uygulanabilecek işlevler veya işlemlerden oluşan bir koleksiyondur. Veri türü dize, Tamsayı, Kayan değer vb. olabilir.

Değiştirilebilir/Değişmez nesne arasındaki fark nedir?
Değiştirilebilir Nesneler
  1. Öğe ekleme, güncelleme veya silme gibi oluşturulduktan sonra durumu değiştirilebilen nesneler.
  2. Listeler, Sözlük, Set, bytearray python'da değiştirilebilir nesne türleridir.
Değişmez Nesneler
  1. Nesne durumu değiştirilemez. Nesne oluşturulduktan sonra öğe ekleyemez, kaldıramaz veya güncelleyemeyiz.
  2. String, Integer, Tuples, Frozenset python'daki değişmez nesne türlerinden bazılarıdır.
Homojen/Heterojen veri yapısı arasındaki fark nedir?
  1. Homojen Veri Yapısı – Veri öğeleri aynı veri türünde olacaktır (ör. Dizi).
  2. Heterojen Veri Yapısı – Veri öğeleri aynı veri türünde olmayabilir (ör. Liste, Gruplar, Kümeler vb.).
İlkel ve İlkel Olmayan veri türü nedir?

Yerleşik veri yapısının işlevselliğini anlamadan önce, veri yapısı nesneleriyle kullanılacak birkaç yerleşik işlevi görelim.

  • dir(obj) – niteliği ve yöntemleri döndürecek yerleşik bir işlev.
  • len(obj) – Bir nesnenin uzunluğunu (öğe sayısını) döndürür. Argüman bir dizi (dize, bayt, tuple, liste veya aralık gibi) veya bir koleksiyon (sözlük, küme veya dondurulmuş küme gibi) olabilir.
  • del – Bu yerleşik anahtar kelime, bir ad alanındaki bir nesneyi silmek veya liste, sözlük vb. gibi bir nesnedeki öğeleri kaldırmak için kullanılır.
  • type(obj) – type() işlevi, nesnenin türünü döndürür veya iletilen bağımsız değişkenlere dayalı olarak yeni bir tür nesnesi döndürür.
  • id() – Bu işlev bir nesnenin "kimliğini" döndürür. Bu, bu nesnenin ömrü boyunca benzersiz ve sabit olması garanti edilen bir tamsayıdır.

Artık birkaç önemli detayı gördüğünüze göre python veri yapılarına geçelim.

Python yerleşik veri yapılarıyla birlikte gelir ve kullanıcılar kendi veri yapılarını tanımlayabilir. Yerleşik veri yapısı LIST, SÖZLÜK, TUPLE ve SET'i içerir. Kullanıcı tanımlı veri yapılarına örnek olarak STACK, QUEUES, TREE, HASHMAP vb. gösterilebilir.

Diğer programlama dillerinden gelen kişiler dizi türüne oldukça aşina olacaktır. Ancak python'da o kadar yaygın değiller.

Burada liste bir tür diziye benzer ancak liste herhangi bir veri tipinin (Heterojen) değerlerini saklamamıza izin verirken dizi yalnızca belirli tipteki verileri (int, float vb.) tutar. Diziyi kullanmak için diziyi “dizi” modülünden açıkça içe aktarmanız gerekir.

Bu Python makale serisinde veri yapısının ve python yerleşik veri yapısının ne olduğuna bakacağız.

LİSTE

Liste, farklı veri türlerinden oluşan bir veri yapısıdır. "Farklı veri türlerinin toplanması" ne anlama geliyor? Liste dizeleri, Tamsayıları, Kayan nokta değerlerini, İç İçe listeyi vb. saklayabilir.

Liste nesneleri "Değiştirilebilir"dir; bu, listede oluşturulan öğelere Erişilebileceği, değiştirilebileceği veya silinebileceği anlamına gelir. Destek indekslemeyi listeleyin. Listelerdeki her öğe bir adrese atanır ve bu adres, belirli öğe değerine erişmek veya bu değeri değiştirmek için kullanılabilir.

  • Liste oluştur
  • Liste Ekle/Eriş/Değiştir
  • Listeyi sil

LİSTE OLUŞTUR

Liste köşeli parantez kullanılarak oluşturulabilir.

>>> name_empty = []			# Empty list
>>> name = ['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']	# list with string data type
>>> name_int = [1,2,3]			# list with Integer data type
>>> name_mixed = [name_int,name,1,2,3.14]	# list with nested list items.
>>> name_mixed
[[1, 2, 3], ['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will'], 1, 2, 3.14]
>>> name_int
[1, 2, 3]

Nesne türünü kontrol etmek için dahili type() fonksiyonunu kullanabiliriz.

>>> type(name)

dir() işlevini kullanarak list örneğinin yöntemlerine ve niteliklerine erişebiliriz.

>>> dir(name)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

Listedeki toplam öğe sayısını len() yöntemini kullanarak bulabiliriz.

>>> len(name)

list.copy() yöntemini kullanarak mevcut bir listeden yeni bir liste oluşturabiliriz.

>>> name_new = name.copy()
>>> name_new
['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']

LİSTE EKLEME/ERİŞME/DEĞİŞTİRME

list.insert(i, x) yöntemini kullanarak listeye herhangi bir konuma öğe ekleyebiliriz.

>>> name = ['Leo','Matt','Kane','Scott','Petter','Will']
>>> name
['Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name.insert(0,'Tom')	# Insert method takes 2 arguments (Index position, Item)
>>> name
['Tom', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']	# Tom is inserted at the 0th position.

Listeye tek bir öğe eklemek için list.append(x) yöntemini kullanabiliriz. Bu, öğeyi listenin sonuna ekleyecektir.

>>> name = []
>>> len(name)
0
>>> name.append('Leo')
>>> name.append('Matt')
>>> name.append('Kane')
>>> print(name)
['Leo', 'Matt', 'Kane']

Listeye birden fazla öğe eklemek için list.extend() yöntemini kullanabiliriz.

>>> new_name = ['Gowtham','Martin','Luis']
>>> name.extend(new_name)
>>> name
['Will', 'Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin', 'Luis']

İki listeyi birleştirmek için '+' operatörünü de kullanabiliriz. Her iki liste de farklı veri türlerinde olabilir.

>>> a = [1,2,3]
>>> b = [2,3,3]
>>> c = a + b
>>> c
[1, 2, 3, 2, 3, 3]
>>> d = ['karthi','kenny']
>>> e = a + d
>>> e
[1, 2, 3, 'karthi', 'kenny']

Daha önce de belirtildiği gibi liste nesneleri değiştirilebilir. Bir liste öğesi, dizin konumuna başvurularak ve ona değer atanarak değiştirilebilir.

>>> name									# Before modified
['Tom', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name[0] = 'Karthi'
>>> name									# After Modified
['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']

Liste hem pozitif hem de negatif indekslemeyi destekler.

Dizine Ekleme 0'dan başlar ve Negatif Dizine Ekleme -1'den başlar.

Liste öğesine dizin konumlarını kullanarak erişebiliriz.

>>> name[0]			# Accessing the List item at index 0
'Leo'
>>> name[1]
'Matt'
>>> name[4]
'Petter'
>>> name[5]
'Will'
>>> name[-1]			# Accessing the list item with negative indexing
'Will'
>>> name[-6]
'Leo'

Listedeki öğelere erişmek için dilimlemeyi de kullanabiliriz. Dilimleme, başlangıç, bitiş, Adım parametrelerini tanımlayarak bir dizi öğeye erişmemizi sağlar.

SYNTAX: list[starting position, ending position, Step]

>>> name[0:3]
['Tom', 'Leo', 'Matt']
>>> name[:]
['Tom', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name[:4]
['Tom', 'Leo', 'Matt', 'Kane']
>>> name[:-2]
['Tom', 'Leo', 'Matt', 'Kane', 'Scott']
>>> name[:-1]
['Tom', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter']
>>> name[:-1:2]
['Tom', 'Matt', 'Scott']

list.count(x) yöntemini kullanarak verilen bir değerin oluşum sayısını bulabiliriz.

>>> name_int = [1,1,2,3,1]
>>> name_int.count(1)
3

Belirli bir öğenin Dizin konumunu list.index(x[, start[, end]]) yöntemini kullanarak bulabiliriz.

>>> name			# Inserted ‘Will’ at the end of the list. Now we have 2 name ‘Will’.
['Will', 'Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will']
>>> name.index('Will)	# Returns the index position of first occurence of x.
0
>>> name.index('Will',2)	# Starting index positon’2’ is given.
7
>>> name.index('Will',2,4)	# Starting and Ending Index position is given. Since there is no 					occurence of ‘Will’ within the given search position it will throw 					Value Error.
Traceback (most recent call last):
File "<stdin>", line 1, in 
ValueError: 'Will' is not in list

Listedeki öğeleri tersine çevirmek için list.reverse() yöntemini kullanabiliriz.

>>> name
['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name.reverse()
>>> name
['Will', 'Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi']

LİSTEYİ SİL

x konumundaki bir listeden öğe çıkarmak için list.pop(x) yöntemini kullanabiliriz. Bu işlev, öğeyi listeden kaldıracak ve kaldırılan öğeyi görüntüleyecektir. x belirtilmezse pop() yöntemi listedeki son öğeyi döndürür.

>>> name
['Will', 'Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin', 'Luis']
>>> name.pop(0)
'Will'
>>> name
['Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin', 'Luis']
>>> name.pop()
'Luis'

Öğeyi listeden kaldırmak için list.remove (x) yöntemini de kullanabiliriz. Burada x öğenin değerini alır ve x listede yoksa bir ValueError atar.

>>> name = ['Leo','Matt','Kane','Scott','Petter','Will']
>>> name.remove('Leo')
>>> name
['Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name.remove('Leo')
Traceback (most recent call last):
  File "", line 1, in 
ValueError: list.remove(x): x not in list

Liste adını köşeli parantezlere atayarak veya list.clear() yöntemini kullanarak bir listeyi boş hale getirebiliriz.

>>> name1 = name.copy()
>>> name1
['Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin']
>>> name
['Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin']
>>> name = []			
>>> name
[]
>>> name1.clear()		
>>> name1
[]

Listeyi boşaltmak veya listeden bir öğeyi kaldırmak için liste yöntemlerini kullanmak yerine, bu eylemleri gerçekleştirmek için yerleşik del anahtar kelimesini kullanabiliriz. “del” anahtar sözcüğü, bir liste nesnesini bellekten silebilir veya listeden bir öğeyi silebilir veya bir dilimden bir öğeyi silebilir.

>>> name = ['Leo','Matt','Kane','Scott','Petter','Will']
>>> del name[0]
>>> name
['Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> del name[-3:]
>>> name
['Matt', 'Kane']
>>> del name[:]
>>> name
[]

Yerleşik id() işlevi, bir nesnenin "kimliğini" döndürür. Bu, bu nesnenin ömrü boyunca benzersiz ve sabit olması garanti edilen bir tamsayıdır.

>>> id(name)
139979929658824
>>> del name
>>> id(name)
Traceback (most recent call last):
  File "", line 1, in 
NameError: name 'name' is not defined

Not: liste değişkenini del() kullanarak bellekten kaldırdık, dolayısıyla ad hatası veriyor.

help() funtion:

Yerleşik yardım function(), belirli bir nesne veya o nesnenin yöntemleri hakkında ayrıntılı bilgi almak için çok faydalıdır.

help(object)
help(object.method)
Özet

Bu makalede şu ana kadar liste yöntemlerini kullanarak liste nesnelerini depolamak, bunlara erişmek, değiştirmek ve silmek için liste veri yapısını nasıl kullanabileceğimizi gördük. Ayrıca id(), dir(), type(), help()< gibi bazı yerleşik işlevleri de gördük. bunlar çok etkili işlevlerdir. Ayrıca Python'da liste oluşturmanın daha kısa ve okunabilir bir yolunu sağlayan liste kavrama özelliğimiz de var.