Python Listelerinde Bir Öğenin Dizini Nasıl Bulunur?

Yayınlanan: 2022-06-29

Bu kılavuzda, hem basit yinelemeler hem de yerleşik bir liste yöntemi index() kullanarak bir Python listesindeki bir öğenin dizinini nasıl bulacağınızı öğreneceksiniz.

Python listeleriyle çalışırken, belirli bir öğenin oluştuğu dizini bulmanız gerekebilir. Bunu şu şekilde yapabilirsiniz:

  • Listede dolaşmak ve mevcut dizindeki öğenin belirli bir değere eşit olup olmadığını kontrol etmek
  • Yerleşik liste yöntemini kullanma index()

Bu eğitimde yukarıdakilerin her ikisini de öğreneceksiniz. Başlayalım.

Python Listeleri, Tekrar Ziyaret Edildi

Python'da liste, aynı veya farklı veri türlerinden oluşan bir öğeler topluluğudur. Değişkendirler ; yeni bir liste oluşturmak zorunda kalmadan bunları yerinde değiştirebilirsiniz.

Bu örnek fruits düşünün: 5 farklı meyveden oluşan bir liste.

 fruits = ["apple","mango","strawberry","pomegranate","melon"]

len() işlevini kullanarak herhangi bir Python nesnesinin uzunluğunu elde edebilirsiniz. Böylece, aşağıda gösterildiği gibi, uzunluğunu almak için argüman olarak liste nesnesi ( fruits ) ile len() işlevini çağırabilirsiniz.

 len(fruits) # Output: 5

Bu eğitimde fruits listesini çalışan bir örnek olarak kullanacağız.

Python Listelerinde İndeksleme

Python sıfır indekslemeyi takip eder. Bu nedenle, herhangi bir Python yinelenebilirinde, ilk öğe 0 dizininde, ikinci öğe 1 dizininde vb. Yinelenebilirin uzunluğu k ise, son öğe k - 1 dizinindedir.

Python'da, yinelenebilirler arasında dolaşırken dizinleri almak için range() işlevini kullanabilirsiniz.

Not : range(k) arasında döngü yaptığınızda, 0,1,2,…,(k-1) endekslerini alırsınız. Böylece k = len(list) ayarını yaparak tüm geçerli indekslerin listesini alabilirsiniz.

Aşağıdaki kod hücresi bunu açıklar.

 for i in range(len(fruits)): print(f"i:{i}, fruit[{i}] is {fruits[i]}") # Output i:0, fruit[0] is apple i:1, fruit[1] is mango i:2, fruit[2] is strawberry i:3, fruit[3] is pomegranate i:4, fruit[4] is melon

Şimdi Python listelerinin temellerini ele aldığımıza göre, bir listedeki bir öğenin indeksini nasıl bulacağımızı öğrenelim.

python-listede-bul

Döngüler İçin Kullanarak Yinelemeyle Liste Öğesinin Dizinini Bulun

Bir önceki bölümdeki liste fruits ele alalım. Bu listedeki belirli bir öğenin dizinini for döngüsünü kullanarak nasıl bulacağımızı öğreneceğiz.

For Loop ve range() İşlevini Kullanma

target : listede aradığımız değeri düzeltelim.

0 ile len(fruits) - 1 arasındaki dizinlerin listesini almak için for loop ve range() işlevini kullanabilirsiniz.

  • Her dizine erişen meyveler listesinde dolaşın.
  • Mevcut i dizinindeki öğenin hedefe eşit olup olmadığını kontrol edin.
  • True ise, target i dizininde bulunduğunu yazdırın.
 fruits = ["apple","mango","strawberry","pomegranate","melon"] target = "mango" for i in range(len(fruits)): if fruits[i] == target: print(f"{target} found at index {i}") # Output mango found at index 1

Bu örnekte, 'mango' hedef dizesi, fruits listesinde tam olarak bir kez (1 dizinde) görünür.

Ancak bazen hedef değer birden fazla görünür veya hiç görünmez. Bu durumları ele almak için, yukarıdaki döngüyü değiştirelim ve içeriği find_in_list adlı bir işlevin içine find_in_list .

Fonksiyon Tanımını Anlama

find_in_list işlevinin iki parametresi vardır:

  • target : aradığınız değer ve
  • py_list : Aradığınız Python listesi.
 def find_in_list(target,py_list): target_indices = [] for i in range(len(fruits)): if fruits[i] == target: target_indices.append(i) if target_indices == []: print("Sorry, target not found!") else: print(f"{target} is found at indices {target_indices}")

İşlev gövdesinde, boş bir target_indices listesi başlatırız. Listede dolaşıyoruz ve liste öğelerine erişiyoruz. Hedef belirli bir dizinde bulunursa, append() yöntemini kullanarak bu dizini target_indices listesine ekleriz.

Not : Python'da list.append(item) item list sonuna ekler.

  • Hedef hiçbir zaman bulunamazsa, target_indices boş bir listedir; kullanıcıya hedefin listede bulunmadığı bildirilir.
  • Hedef birden fazla dizinde bulunursa, target_indices tüm bu dizinleri içerir.

Ardından, fruits listesini gösterildiği gibi yeniden tanımlayalım.

Bu sefer, 1. ve 4. indekslerde iki kez meydana gelen 'mango' target dizesini arıyoruz.

 fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] target = "mango" find_in_list(target,fruits) # Output mango is found at indices [1, 4]

Argüman olarak target ve fruits ile find_in_list işlevini çağırdığımızda, her iki dizinin de döndürüldüğünü görüyoruz.

 target = "turnip" find_in_list(target,fruits) # Output Sorry, target not found!

fruits listesinde olmayan 'turnip' aramasını denerseniz, hedefin bulunamadığına dair bir mesaj alırsınız.

For Loop ve enumerate() İşlevini Kullanma

Python'da, range() işlevini kullanmak zorunda kalmadan hem dizine hem de öğelere aynı anda erişmek için enumerate() işlevini kullanabilirsiniz.

Aşağıdaki kod hücresi, hem dizinleri hem de öğeleri almak için enumerate() işlevini nasıl kullanabileceğinizi gösterir.

 fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] for index,fruit in enumerate(fruits): print(f"Index {index}: {fruit}") # Output Index 0: apple Index 1: mango Index 2: strawberry Index 3: pomegranate Index 4: mango Index 5: melon

Şimdi listedeki öğelerin indeksini bulmak için enumerate() işlevini kullanarak Python işlevini yeniden yazalım.

 def find_in_list(target,py_list): target_indices = [] for index, fruit in enumerate(fruits): if fruit == target: target_indices.append(index) if target_indices == []: print("Sorry, target not found!") else: print(f"{target} is found at indices {target_indices}")

Önceki bölümde olduğu gibi, artık geçerli argümanlarla find_in_list işlevini çağırabilirsiniz.

Yukarıdaki fonksiyon tanımını eşdeğer bir liste kavrayışına çevirebilirsiniz ve bunu bir sonraki bölümde yapacağız.

Liste Anlamayı Kullanarak Yinelemeyle Liste Öğesinin Dizinini Bulun

Python'daki liste kavramaları, bazı koşullara dayalı olarak mevcut listelerden listeler oluşturmanıza olanak tanır. İşte genel yapı:

 new_list = [<output> for <items in existing iterables> if <condition is true>]

Aşağıdaki şekil, liste anlama öğelerinin nasıl tanımlanacağını açıklamaktadır; bunu kullanarak find_in_list işlevini bir liste kavrayışına dönüştürebilirsiniz.

python-listede-bul

Yukarıdakileri kullanarak, hedef indeksler oluşturmak için liste anlama ifadesi aşağıdaki gibidir.

 target_indices = [index for index,fruit in enumerate(fruits) if fruit==target]

Bir alıştırma olarak, birkaç başka örnek için yukarıdaki kod parçacığını çalıştırmayı deneyebilirsiniz.

index() Yöntemini Kullanarak Liste Öğesinin Dizinini Bulun

Python listesindeki bir öğenin dizinini bulmak için yerleşik .index() yöntemini de kullanabilirsiniz. İşte genel sözdizimi:

 list.index(value,start,end)

Yukarıdaki yöntemi ayrıştırma:

  • value , aradığınız hedef değerdir.
  • start ​​ve end isteğe bağlı konumsal bağımsız değişkenlerdir; bunları, start başlayıp end - 1 .

Not : .index() yöntemi, yalnızca list value ilk oluşumunun dizinini döndürür. [start: end-1] liste diliminde bir öğenin dizinini bulsanız bile, bu yöntem yalnızca öğenin ilk oluşumuna karşılık gelen dizini döndürür.

.index() yönteminin nasıl çalıştığını anlamak için örneğimizi tekrar gözden geçirelim.

 fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] target = "mango" fruits.index(target) 1

fruits listesinde iki 'mango' oluşumu olmasına rağmen, yalnızca ilk oluşumun dizininin döndürüldüğünü görebilirsiniz.

Mangonun ikinci oluşumunun indeksini almak için, aşağıda gösterildiği gibi indeks 2'den başlayıp indeks 5'e kadar uzanan liste diliminde arama yapabiliriz.

 fruits.index(target,2,5) 4

Python'da ValueErrors Nasıl İşlenir

Şimdi listede olmayan bir öğenin indeksini bulmaya çalışırsanız, diyelim ki 'carrot' ne olacağını görelim.

 target = "carrot" fruits.index(target) # Output --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-17-81bd454e44f7> in <module>() 1 target = "carrot" 2 ----> 3 fruits.index(target) ValueError: 'carrot' is not in list

Yukarıdaki kod hücresinde görüldüğü gibi, bu bir ValueError atar. Python'da, try ve except bloklarını kullanarak bunu bir istisna olarak ele alabilirsiniz.

try-except kullanılacak genel sözdizimi aşağıdaki gibidir.

 try: # to do this except <ErrorType>: # do this to handle <ErrorType> as exception

Yukarıdaki try-except bloklarını kullanarak ValueError'u bir istisna olarak işleyebiliriz.

 target = "carrot" try: fruits.index(target) except ValueError: print(f"Sorry, could not find {target} in list") # Output Sorry, could not find carrot in list

Yukarıdaki kod aşağıdakileri yapar:

  • Listede hedef varsa, hedefin dizinini döndürür.
  • Hedef mevcut değilse, ValueError'ı bir istisna olarak ele alır ve hata mesajını yazdırır.

Özetliyor

Python listesindeki bir öğenin dizinini bulmak için öğrendiğiniz farklı yöntemlerin bir özetini burada bulabilirsiniz.

  • Öğeleri ve ilgili dizinlerini almak için Python'un for loop ve range() işlevini kullanabilirsiniz. Endekslerdeki öğelerin hedefle eşleşip eşleşmediğini kontrol edin.
  • Öğeye ve dizine aynı anda erişmek için enumerate() işlevini de kullanabilirsiniz.
  • Yukarıdaki yöntemlerin her ikisini de bir liste anlama ifadesinin içinde kullanabilirsiniz.
  • Bir listedeki bir öğenin dizinini bulmak için yerleşik .index() yöntemini de kullanabilirsiniz.
  • list.index(value) , list içindeki değerin ilk oluşumunun dizinini döndürür. Değer mevcut değilse, ValueError değerini yükseltir.
  • Liste diliminde [start:end-1] bir değerin oluşumunu aramak için list.index(value, start, end) kullanarak listenin belirli bir diliminde arama yapabilirsiniz.

Ardından, bir Python sözlüğünü anahtara veya değere göre sıralamayı öğrenin. Mutlu Python programlama!