-
Stringlerin non-scalar veri tiplerine örnek olduğunu konuşmuştuk. Stringler elemanları karakter olan, alt birim olarak karakterler içerin bir veri tipi.
-
Stringler karakterler dizisi olduğu için, bu dizideki spesifik konumdaki elemanlara erişmek isteyebiliriz. Mesela string'in ilk karakteri nedir gibi.
-
Bir yapının alt elemanına erişmek için yapacağımız işleme
indexingdeniyor. Bunu köşeli parantez[]ile sağlayacağız -
isimdiye bir değişken oluşturup, string'e eşitleyip, ilk elemanına(karakterine) erişelim.
isim = "Deniz"isim[1]'e'
"Deniz"[1]'e'
-
Wow ne oldu ?
-
Python'da indexler
0dan başlıyor. Yani biz ilk elemana ulaşmak istiyorsak[0]ile sorgulamamız lazım
isim[0]'D'
- İkinci eleman için de
[1]
isim[1]'e'
- Aynı şeyleri string'i bir değişkene atamadan da yapabilirdik
"Deniz"[0]'D'
"Deniz"[1]'e'
- Son elemanı elde etmek için
[-1]yazabiliriz
isim[-1]'z'
- Sondan ikinci için
[-2]
isim[-2]'i'
Deniz5 karakterden oluşuyor. Indexleri 0,1,2,3,4. Eğer ben 4 ten büyük bir index verirsem o indexte bir elemanı olmadığı için hata alırım
len(isim)5
isim[4]'z'
isim[5]---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-13-f0339b205fca> in <module>
----> 1 isim[5]
IndexError: string index out of range
isim[10]---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-15-f25549abd903> in <module>
----> 1 isim[10]
IndexError: string index out of range
- Stringlerin elemanlarının değiştirilemez olduğundan bahsetmiştik (immutable). O yüzden şöyle şeyler yapamayız: (elemanlarını değiştirebildiğimiz non-scalar veri tiplerini de göreceğiz)
isim'Deniz'
isim[0] = "b"---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-17-59044b134158> in <module>
----> 1 isim[0] = "b"
TypeError: 'str' object does not support item assignment
-
Indexing ile sonuç olarak sadece bir eleman elde ettik. Ama bir kaç tanesini arka arkaya, bir öbek olarak istiyorsam ne yapardım ?
-
Diyelim ki ilk elemandan başlayarak 3. elemana kadar olan karakterleri elde etmek istiyorum (0. indexten 3. indexe kadar olanları)
isim'Deniz'
# Burada önemli olan nokta ilk belirtilen indexing dahil edilip son olarak yazılanın dahil edilmemesi
# 0,1,2 indexlerindekileri döndürdü sonuç olarak
isim[0:3]'Den'
başlangıç:bitişolarak veriyoruz ve bitiş olarak verdiğimiz index dahil olmuyor. Başlangıcı belirtmezsek Python default olarak başlangıç değerini 0 alıyor.
isim[:3]'Den'
- Bitişi belitmezseniz Python String'in sonuna kadar alıyor, bu sefer son elemanını da dahil ediyor.
isim[1:]'eniz'
isim[0:]'Deniz'
isim[:]'Deniz'
- Slicing yaparken bitiş olarak verdiğimiz deper en büyük indeximizden büyükse hata almayız, sadece sonuna kadar almış olur (sadece indexing yaparken en büyük indexten büyük değer verince hata alıyorduk)
len(isim)5
isim[1:20]'eniz'
isim[1:200]'eniz'
isim[1:]'eniz'
başlangıç:bitişolarak slicing yapabileceğimiz gibi,başlangıç:bitiş:adımformunda da slicing yapabiliriz. Buradaadımparametresi kaçar kaçar gideceğimizi belirler.
isim'Deniz'
isim[0:10:2]'Dnz'
isim[0:10:3]'Di'
- Adım eksi bir değer de olabilir. Böylece ters yönce gitmiş oluruz. Ama başlangıç değerinin bitiş değerinden büyük olması lazım bunu yapabilmem için.
# 0. indexten 10. indexe 2 azalarak gidemez, o yüzden boş string döndürür
isim[0:10:-1]''
isim[10:0:-1]'zine'
isim[::-1]'zineD'
isim[::-2]'znD'