Bu dersteki bütün IPython Notebook'lar adresinde https://github.com/sinanonur/Python-Lectures mevcuttur ve bu adresteki içerik Türkçe'ye çevirilerek hazırlanmıştır.
Basit bir ifadeyle bir grup verinin bir yapı kullanarak ifade edilmesidir.
Listeler en çok kullanılan veritürleridir. Köşeli parantezler içine alınmış ve virgülle ayırılmış veriler şeklinde düşünülebilir. Bu verilerden her birine indis(index) değeri ile erişilebilir.
Liste tanımlamak için bir değişken '[ ]' e ya da list'e eşitlenebilir.
a = []
print type(a)
Vir dizi veri aşşağıda görüldüğü gibi doğrudan atanabilir.
x = ['elma', 'armut']
Pythonda indisler 0dan başlar. Böylece x listesi 0ç indiste elma 1. indiste armut bulunduravaktır.
x[0]
İndisleme ters sırada da yapılabilir. Böylece son elemana erişim önce sağlanır. Bu şekildeki indisleme -1 den başlar. Böylece -1 inci indiste armut -2 inci indiste elma olacaktır.
x[-1]
Böylece tahmin etmiş olabileceğiniz gibi x[0] = x[-2], x[1] = x[-1] olacaktır. Bu özellik daha fazla elemanlı listelere de uygulanabilir.
y = ['havuc','patates']
Böylece kendi verisini içeren x ve y listeleri tanımlamoş olduk. Bu iki liste de bunları içeren başka bir z listesine koyulabilir. Liste içinde liste yer alma durumuna iç içe (nested) listeler denir .
len(z)
z = [x,y]
print z
İndislemenin nasış çalıştığı anlaşılmazsa iç içe listeler biraz kafa karıştırıcı olabilir. Bu yüzden parça parça inceleyerek bir sonuca varalım.
üstteki listede 'elma'ya ulaşmak istediğimizi varsayalım. 0ıncı indiste ['elma','armut'] listesi ve 1inci indiste başka bir şiste olan ['havuc', 'patates'] listesi vardır.
öyleyse z[0] bize elma içeren ilk listeyi vermelidir.
z1 = z[0]
print z1
Görüldüğü gibi z1 iç içe girmiş bir liste değildir. Böylece 'elma' ya erişmek için 0ıncı indise bakılmalıdır.
z1[0]
Yukarıdakini yapmak yerine pythonda indis değerleri yan yana yazılabilir.
z[0][0]
Liste içinde liste içinde liste olması durumunda en içerideki veriyez[ ][ ][ ] şeklinde ulaşılabilir.
İndisleri kullanarak sadece tek bir elemana ulaşabildik. Fakat kesme(slicing) kullanarak listenin içindeki bir sıra veriye erişim sağlayaibliriz. Diğer bir deyişle listeyi "keseriz".
Kesme(slicing) alınacak ilk eleman ve son elemanın indislerini vererek yapılır. [ a : b] şeklinde ifade edilir. Burada a ve b kaynak listedeki indislerdir. Eğer atanımlı değilse listenin ilk elemanı b tanımlı değilse listenin son elemanı olduğu varsayılır.
num = [0,1,2,3,4,5,6,7,8,9]
print num[0:4]
print num[4:]
Kaynak listeyi belli bir genişlikte ya da adım büyüklüğünde de kesebilirsiniz.
num[:9:3]
bir listenin uzunluğunu bulmak için len( ) kullanılır.
len(num)
Eğer liste sayılardan oluşuyorsa min( ) ve max( ) minimum ve maksimum değerleri verir..
min(num)
max(num)
Listeler '+' kullanarak birleştirilebilir. Sonuç listesi eklenen listelerin bütün elemanalrını içerir.
[1,2,3] + [5,4,7]
Bir elemanın bir listede bulunup bulunmadığını kontrol etmek istediğiniz durumlar olabilir. Aşşağıdaki listeyi ele alalım.
elementler = ['Toprak','Ateş','Su','Tahta']
'Ateş' ve 'Hava' nın elementler listesine yer alıp almadığına bakmak için geleneksel yaklaşım bir döngü kurarak teker teker kontrol etmektir. Ama pythonda 'a in b' şeklinde ifadeler kullanabilir. Bu ifadeler eğer a b nin içerisinde mevcutsa 'True' değilse 'False' döner.
'Ateş' in elementler
'Hava' in elementler
Elemanları string olan bir listede max( ) ve min( ) fonksiyonları uygulanabilir. max( ) ASCII değeri en yüksek olan stringi min( ) ise en düşük olanı döndürecektir. Öncelikle ilk karakterlerine göre karşılaştırma yapılır. İlk karakterlerin aynı olması durumunda ikinci karakterlere bakılır.
mlist = ['bzaa','ds','nc','az','z','klm']
print max(mlist)
print min(mlist)
Burada bütün elemanların ilk karakterleri dikkate alınmışrır. böylece znin değeri en yüksek çıkmıştır. Minimum ascii değeri ise a dır. Peki ya sayılar karakter olarak tanımlanırsa?
nlist = ['1','94','93','1000']
print "max:", max(nlist)
print "min:", min(nlist)
Sayılar string içinde tanımlı bile olsa her elemanın ilk indisi dikkate alınır ve maksimum minimum değerler ona göre döndürülür.
max( ) string elemanını stringin uzunluğu üzerinden bulmak istiyorsanız max( ) ve min( ) fonksiyonlarına 'key=len' parametresi verilir.
print max(elementler, key=len)
print min(elementler, key=len)
max() or min() fonksiyonları eğer aynı uzunlukta iki tane eleman varsa ilkini döndürürler.
Başka bir gömülü fonksiyon ya da lambda fonksiyonu(ileride gösterilecek) len yerine koyulabilir. len.
Bir string list() fonksiyonu kullanarak bir listeye çevirilebilir..
list('merhaba')
append( ) listenin sonuna eleman eklemek için kullanılır.
lst = [1,1,4,8,7]
lst.append(1)
print lst
count( ) is used to count the number of a particular element that is present in the list.
lst.count(1)
append( ) fonksiyonu aynı zamanda başka bir listeyi listenin sonuna eklemek için de kullanılabilir. Sonuç iç içe girmiş listedir.
lst1 = [5,4,2,8]
lst.append(lst1)
print lst
Eğer istenen şey iç içe geçmiş listeler değilse extend( ) fonksiyonu kullanılabilir.
lst.extend(lst1)
print lst
index( ) bir elemanın indisini bulmak için kullanılır. Aynı elemandan birden fazla varsa ilk indis döndürülür.
lst.index(8)
lst.index(1)
insert(x,y) x indisine y elemanını yerleştirmek için kullanılır. append( ) sadece listenin sonuna ekleme imkanı verir.
lst.insert(5, 'name')
print lst
insert(x,y) yeni bir eleman ekler fakat elemanı değiştirmez. O indizteki elemanı değiştirmek istiyorsanız o indise yeni bir atama yapabilirsiniz.
lst[5] = 'Python'
print lst
pop( ) fonksiyonu listenin son elemanını döndürür. Böylece listeler yığıt(stack) olarak kullanılabilirler.
lst.pop()
print lst
Belirli bir indisteki değeri pop etmek isterseniz indis değeri pop fonksiyonuna verilebilir.
lst.pop(0)
print lst
pop( ) bir elemanı indisine göre silmek için kullanılır ve sonuc başka bir değişkene atanabilir. Listeden belirli bir elemanı silmek için remove( ) fonksiyonu kullanılaiblir.
lst.remove('Python')
print lst
remove fonksiyonuna alternatif olarak indis değeri ile del kullanılabilir.
del lst[1]
print lst
Listenin bütün elemanları reverse() fonksiyonu kullanarak tersine çevirilebilir.
lst.reverse()
print lst
[5,4,2,8] listesinin üst listenin herhangi bir elemanı gibi muamele gördüğüne dikkat edin. İç listenin içindeki elemanlar tersine çevirilmeyecektir.
Python gömülü olarak gelen sort( ) işlemiyle elemanları artan sırada sıralama imkanı verir.
lst.sort()
print lst
Azalan sıra için reverse parametresi True olarak verilebilir. reversin varsayılan değeri False'tur.
lst.sort(reverse=True)
print lst
Benzer şekilde string içeren listeler için sort( ) elemanları ACII değerine göre artan sırayla sıralayacaktır. reverse=True kullanarak azalan sırada sıralamak mümkündür.
elementler.sort()
print elementler
elementler.sort(reverse=True)
print elementler
Uzunluğa göre sıralamak için key=len belirtildiği gibi gösterilmelidir.
elementler.sort(key=len)
print elementler
elementler.sort(key=len,reverse=True)
print elementler
Çoğu yeni python programcısı bu hatayı yapar. Aşşağıdaki örneğe bakalım:
lista= [2,1,4,3]
listb = lista
print listb
Burada, lista = [2,1,4,3] şeklinde bir liste tanımladık. Atama yaparak bu liste listb ye kopyalanır. Şimdi lista üzerinde rastgele işlemler yapalım
lista.pop()
print lista
lista.append(9)
print lista
print listb
Üzerinde hiçbir işlem yapılmadığı halde listb de değişti. Çünkü lista ve listb için aynı bellek adresi kullanılmaktadır. Peki bunu nasıl düzeltiriz?
Eğer hatırlarsanız lesme işlemleri sırasında ataliste[a:b] atalistenin a indsinden başlayarak b indisine kadar alıyordu. Ve a ve b belirtilmediğinde varsayılan olarak ilk ve son elemanlar alınıyordu. Aynı kavramı burada da kullanabiliriz. Böylece lista içindeki beriyi listbye koyalamış oluruz.
lista = [2,1,4,3]
listb = lista[:]
print listb
lista.pop()
print lista
lista.append(9)
print lista
print listb
TupleLar listelere benzer. Fakar en büyük farkı listelerin içindeki elemanlar değişeiblirken tupleların içindeki elemanların değişememesidir.Tupleları belli bir şey için doğru olması gereken ama dğer şeyler için doğru olmayan şeyler olarak düşünün. Daha iyi anlayabilmek için divmod() fonksiyonunu hatırlayalım.
xyz = divmod(10,3)
print xyz
print type(xyz)
Burada bölüm 3 kalan da 1 olmak zorundadır. 10 3'e bölünüyordsa bu değerler değişemez.Bu yüzden divmod bu değerleri bir tuple içinde döndürür.
Bir tuple tanımlamak için değişkene parantezler () ya da tuple() atanır.
tup = ()
tup2 = tuple()
Eğer doğrudan bir tuple tanımlamak istiyorsanız verinin sonuna bir virgül koyaiblirsiniz. data.
27,
27nin 2 katı 54tür, fakat tuple 2 ile çarpılınca iki kez tekrar eder.
2*(27,)
Bir tuple tanımlarken değer atanabilir. Bir listeyi ya da stringi alır ve bunu bir tuple'a dönüştürür.
tup3 = tuple([1,2,3])
print tup3
tup4 = tuple('Merhaba')
print tup4
Listelerle aynı indisleme ve kesme(slicing) işlemleri uygulanabilir.
print tup3[1]
tup5 = tup4[:3]
print tup5
(a,b,c)= ('alpha','beta','gamma')
print a,b,c
d = tuple('SinanOnur')
print d
count() fonksiyonu tuple içerisinde belirtilen elemandan kaç tane olduğunu sayar.
d.count('a')
index()fonksiyonu belirtilen elemanın indisini döndürür.Eğer birden fazla o eşemandan varsa listede ilk karşılaşılan eleman döndürülür.
d.index('a')
Kümeler genellikle bir dizi ya da listede tekrar eden elemanlardan kaçınmak için kullanılır. Bunun dışında standart bazı küme işlemlerini yapmak için de kullanılır.
Kğmeler set() şeklinde tanımlanır. Bu boş bir küme oluşturur. set([dizi]) elemanlı bir küme tanımlamak için kullanılabilir.
set1 = set()
print type(set1)
set0 = set([1,2,2,3,3,4])
print set0
2 ve 3 elemanları iki kez tekrar etmesine rağmen görüldüğü gibi bir kez bulunurlar. Böylece kümedeki her eleman diğerlerinden farklı olur.
set1 = set([1,2,3])
set2 = set([2,3,4,5])
union( ) fonksiyonu kümelerin birleşimini verir. Birleşim tekrar olmadan her iki kümedeki elemanları içerir.
set1.union(set2)
add( ) will add a particular element into the set. Note that the index of the newly added element is arbitrary and can be placed anywhere not neccessarily in the end.
set1.add(0)
set1
intersection( ) foksiyonu her iki kümede de olan elemanların bir kümesini döndürür.
set1.intersection(set2)
difference( ) fonksiyonu birinci kümede olup ikinci kümede olmayan fonksiyonların kümesini döndürür.
set1.difference(set2)
symmetric_difference( ) fonksiyonu iki kümeden yalnızca birisinde olan elemanların kümesini döndürür..
set2.symmetric_difference(set1)
issubset( ), isdisjoint( ), issuperset( ) fonksiyonları sırasıyla set1 set2 için alt kümesi mi, ayrık mı, üst kümesi mi kontrollerini yapar.
set1.issubset(set2)
set2.isdisjoint(set1)
set2.issuperset(set1)
pop( ) kümeden herhangi bir eleman çıkartmak için kullanılır.
print set1
set1.pop()
print set1
remove( ) belirtilen elemanı kümeden siler.
set1.remove(2)
set1
clear( ) bir kümeden bütün elemanları çıakrtarak boş küme olmasını sağlar.
set1.clear()
set1