Kurs
Python'da bir veri yapısı, verileri verimli bir şekilde düzenlemenize ve saklamanıza yardımcı olur. Yaygın ve esnek yapılardan biri, belirli bir sırayla farklı türlerde verileri tutabilen listedir. Python ayrıca listelerle çalışmak için birçok fonksiyon veya metod sağlar.
Bu derste, Python index() fonksiyonunu öğreneceksiniz. index() metodu, listede bir öğeyi arar ve onun konumunu/indisini döndürür. Önce listelere kısa bir giriş yapacak, ardından index() fonksiyonuyla nasıl çalışacağınıza dair basit örnekler göreceksiniz.
Bu dersteki tüm örnek kodları kolayca kendiniz çalıştırmak için, Python'un önceden yüklü olduğu ve tüm kod örneklerini içeren bir DataLab çalışma kitabını ücretsiz oluşturabilirsiniz.
Python'da İndeksleme Nedir?
Python'da indeksleme, bir dizi (örneğin bir string veya liste) içindeki belirli bir öğeye, onun konumu ya da indeks numarasıyla erişme işlemidir. Python'da indeksleme 0'dan başlar; yani dizideki ilk öğenin indeksi 0, ikinci öğenin indeksi 1'dir ve böyle devam eder. Örneğin, "Hello" string'ine sahipseniz, köşeli parantez gösterimini kullanarak string[0] ile ilk harf olan "H"'ye erişebilirsiniz.
Python'un yerleşik index() fonksiyonu, bir dizide belirli bir öğenin indeksini bulmak için kullanışlı bir araçtır. Bu fonksiyon, aranacak değeri temsil eden bir argüman alır ve o değerin dizide ilk göründüğü yerin indeksini döndürür.
Eğer değer dizide bulunamazsa, fonksiyon bir ValueError yükseltir. Örneğin, [1, 2, 3, 4, 5] listesine sahipseniz, 3 değerinin indeksini list.index(3) çağrısıyla bulabilirsiniz; bu da 2 değerini döndürür (çünkü 3 listedeki üçüncü öğedir ve indeksleme 0'dan başlar).
index() fonksiyonu, bir dizideki öğenin indeksini bulma sürecini basitleştirdiği için Python'da güçlü bir araçtır; döngüler veya koşullu ifadeler yazma ihtiyacını ortadan kaldırır. Özellikle büyük veri kümeleri veya karmaşık yapılarla çalışırken, elle arama yapmak zaman alıcı ve hataya açık olabileceğinden bu fonksiyon oldukça kullanışlıdır.
index() Fonksiyonu Nedir?
index() metodu, aranan öğenin göründüğü listedeki en düşük indeksi döndürür.
Hadi deneyelim:
list_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
element = 3
print(list_numbers.index(element)) # 2
Listede bulunmayan bir öğe aranırsa, bir ValueError döner.
list_numbers = [4, 5, 6, 7, 8, 9, 10]
element = 3 # Not in the list
print(list_numbers.index(element)) # Throws a ValueError
String'lerle Çalışmak
Şimdi de string öğelerle deneyelim:
list_numbers = [1, 'two', 3, 4, 5, 6, 7, 8, 9, 10]
element = 'two'
print(list_numbers.index(element)) # 1
Not: String aramalarında index() büyük/küçük harfe duyarlıdır. Örneğin, 'Hello'.index('h') bir ValueError yükseltir.
İlk Görünümü Bulma
Bir öğenin birden fazla örneği varsa, index() size öğenin ilk göründüğü konumu verir.
list_numbers = [3, 1, 2, 3, 3, 4, 5, 6, 3, 7, 8, 9, 10]
element = 3
print(list_numbers.index(element)) # 0
Döndürülen konum 0'dır; çünkü 3 Python'da ilk konum olan 0. indekste ilk kez görünür.
İçeride olan şu: Indeks, 1. konumdan (0. indeks) başlayarak tüm değerleri tarar ve aradığınız öğeyi bulmaya çalışır. Değeri bulduğunda konumu döndürür ve işlemi sonlandırır. Ancak, bu yöntem uzun bir listenin sonlarına yakın bir öğenin konumuna ihtiyaç duyduğunuzda çok verimli değildir.
Start ve Stop Parametrelerini Kullanma
list_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
element = 7
print(list_numbers.index(element, 5, 8)) # 6
Yazım şekli şöyledir: list_name.index(element, start, stop).
Burada start ve stop değerleri isteğe bağlıdır. Aslında, aralığa tamamen emin olduğunuzda kullanın; aksi takdirde aşağıda gösterildiği gibi bir ValueError alırsınız.
list_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
element = 7
print(list_numbers.index(element, 1, 5)) # Throws a ValueError
Tüm Görünümleri Bulma
index() yalnızca bir nesnenin ilk eşleşmesini döndürdüğünden, listede daha fazla eşleşmenin konumlarına ihtiyaç duyarsanız list kapsamı (list comprehension) veya jeneratör ifadesi kullanabilirsiniz. İşte nasıl yapılacağı:
list_numbers = [3, 1, 2, 3, 3, 4, 5, 6, 3, 7, 8, 9, 10]
# List comprehension
print([i for i, n in enumerate(list_numbers) if n == 3]) # [0, 3, 4, 8]
list_numbers = [3, 1, 2, 3, 3, 4, 5, 6, 3, 7, 8, 9, 10]
g = (i for i, n in enumerate(list_numbers) if n == 3) # Generator expression
print("Generators store values, the first value here is:", next(g), ". Then the next is:", next(g), "followed by ", next(g),"and finally ", next(g))
# Generators store values, the first value here is: 0. Then the next is: 3 followed by 4 and finally 8
Jeneratörler, tüm sonuçları list kapsamları gibi depolamak yerine öğeleri tek tek ürettikleri için bellek açısından verimlidir.
Son Düşünceler
Tebrikler, Python'daki index() fonksiyonunu yeni öğrendiniz! Listelerle çalışmanıza nasıl yardımcı olabileceğini gördünüz. Ayrıca bazı yeni kavramlara da giriş yaptınız. List kapsamı hakkında daha fazlası için DataCamp'in Python List Comprehension dersine göz atın. Jeneratörler ve jeneratör ifadeleri hakkında daha fazlası için DataCamp'in Python Iterator Tutorial içeriğine bakın.

Çeşitli sektörlerde çalıştım ve birden çok rol üstlendim: yazılım geliştirici, makine öğrenimi araştırmacısı, veri bilimci, ürün yöneticisi. Ancak özünde, öğrenmeyi ve bilgiyi paylaşmayı seven bir programcıyım!
SSS
Aradığım öğeyle birden fazla değer eşleşirse ne olur?
index() metodu yalnızca eşleşen öğenin ilk görünümünün indeksini döndürür. Tüm konumlara ihtiyaç duyuyorsanız, enumerate() ile bir list kapsamı kullanın.
index()'i demetler veya string'lerle kullanabilir miyim?
Evet! index() metodu, demetler ve string'ler dâhil olmak üzere herhangi bir dizi türünde çalışır:
my_tuple = (1, 2, 3, 2)
print(my_tuple.index(2)) # Output: 1
text = "hello world"
print(text.index('o')) # Output: 4ValueError'ı zarifçe ele almanın bir yolu var mı?
Evet, öğe bulunamazsa çöküşü önlemek için index() çağrısını bir try...except bloğuna alın:
my_list = [1, 2, 3]
try:
print(my_list.index(4))
except ValueError:
print("Element not found.")
Listenin sonundan itibaren nasıl arama yapabilirim?
index() metodu ters yönde aramayı desteklemez. Son görünümü bulmak için listeyi elle ters çevirin ya da bir kapsam kullanın:
my_list = [1, 2, 3, 2, 1]
last_index = len(my_list) - 1 - my_list[::-1].index(2)
print(last_index) # Output: 3
index() find()'dan nasıl farklıdır?
find() metodu string'lerle kullanılır ve değer bulunamadığında hata yerine -1 döndürür. Listelerde find() metodu yoktur.
text = "hello"
print(text.find('e')) # Output: 1
print(text.find('z')) # Output: -1
index()'i iç içe listelerle kullanabilir miyim?
Evet, ancak yalnızca üst düzeyde. index() iç içe geçmiş yapıların içine bakmaz.
nested_list = [[1, 2], [3, 4]]
print(nested_list.index([3, 4])) # Output: 1
# This won't work: nested_list.index(3)
"list index out of range" hatası nedir?
"list index out of range" hatası, bir listenin geçerli indeks aralığının dışında bir indekse erişmeye çalıştığınızda oluşur. Örneğin, bir listede 5 öğe varsa, geçerli indeksler 0 ile 4 arasındadır. 5'e eşit veya 5'ten büyük bir indekse erişmeye çalışırsanız bu hatayı alırsınız.
"list index out of range" hatasından kaçınmak için, erişmeye çalıştığınız indeksin listenin geçerli indeks aralığında olduğundan emin olun. Bir listenin uzunluğunu almak ve bir indeksin geçerli aralıkta olup olmadığını kontrol etmek için len() fonksiyonunu kullanabilirsiniz.
"list indices must be integers" hatası nedir?
"list indices must be integers" hatası, bir liste indeksi olarak tam sayı olmayan bir değer kullanmaya çalıştığınızda oluşur. Örneğin, bir kayan noktalı sayı veya string'i liste indeksi olarak kullanmaya çalışırsanız bu hatayı alırsınız.
"list indices must be integers" hatasından kaçınmak için, liste indeksi olarak bir tam sayı değeri kullandığınızdan emin olun. Bir indeksi tam sayı olmayan bir değerden elde etmeniz gerekiyorsa, int() fonksiyonunu kullanarak onu tam sayıya dönüştürebilirsiniz.