Python’da bir liste veya diziyle çalışıyorsanız ve muhtemelen dilimlemeye çalıştınız. Ancak beklenen sonuç yerine, “liste dizini aralık dışında” diyen bir hata alırsınız. Merak etme, herkesin başına gelebilir.
Bu hatanın ne anlama geldiğini, nedenini ve daha fazla uzatmadan nasıl kaldırılacağını araştıralım.
Python’da “liste dizini aralık dışında” Hatası Ne Anlama Geliyor?
Python bir “liste dizini aralık dışında” hatası attığında, listeyi son dizininin ötesinde dilimlemeye çalıştığınız anlamına gelir.
Python, listedeki her öğeyi dizinine göre tanımlar. Ve bir listenin dizini sıfırdan başlar. Örneğin, beş öğeli bir listenuz olduğunda, ilk öğesi sıfır dizininde, sonuncusu ise dördüncü dizindedir.
Örneğin, beş programlama dili listesinde:
Languages = ("Python", "Go", "PHP", "C", "Perl")
Yukarıdaki listenin dizini oluşturma sıfır ile dört arasındadır. Bu nedenle, aşağıda gösterildiği gibi beşinci öğeyi yazdırmak için dilimlemeye çalışmak bir hata verir:
print(languages(5))
Output:
IndexError: list index out of range
Yukarıdaki örnekte, Python listedeki beşinci dizini aramaya çalışır ve bulamadığında liste dizini hatasını atar. Bunun nedeni, ilk öğenin (Python) dizin sıfırda, son öğenin (Perl) ise dizin dört üzerinde olmasıdır.
“Liste dizini aralık dışında” hatasının temeli budur. Söylendiği gibi, Python bir listeyi son dizininin ötesinde dilimlemeye çalıştığınızda atar.
Python’da “liste dizini aralık dışı” Hatası Nasıl Kaldırılır
Peki bu hatayı nasıl kaldırabilirsiniz? Bu çok kolay.
Yukarıdaki önceki bölüme ek olarak, için liste anlama döngüsü:
indexes = (languages.index(i) for i in languages)
print(indexes)
Output:
(0, 1, 2, 3, 4)
Bir listenin dizini programlamada dilimlemenin temelidir. Bu nedenle, yukarıdaki çıktı için listenin en yüksek dizinini bildiğinizden (4), dilim sınırını deşifre edebilirsiniz.
Bu nedenle, listeyi dilimleyip son öğeyi almak için:
print(languages(4))
Output:
Perl
Şimdi doğru sonucu elde ediyor.
Dizinini Kullanarak Listede Döngü Yapmak İsterseniz Ne Olur?
Döngü için normal Python’un yanı sıra, bir listeyi yinelemek için dizin kavramını da kullanabilirsiniz. Bu yöntem meşakkatli görünse de, bazen kaçınılmazdır. Örneğin, bir listeyi ters sırada sıralamak istiyorsanız kullanışlı olur.
Bu yöntem, bir başlangıç dizini ayarlayarak ve kullanılabilir son dizine kadar bir dizin artırarak veya artırarak çalışır.
Artan dizin numarasına sahip öğeleri yazdırmak için (son öğeye ilk öğe), örneğin:
index = 0 # Initial index
for i in Languages:
print(Languages(index))
index +=1
Output:
Python
Go
PHP
C
Perl
Ancak ilk dizini sıfır yerine bir olarak ayarlarsanız ne olur? Bir göz atın:
index = 1 # Initial index
for i in Languages:
print(Languages(index))
index +=1
Output:
Go
PHP
C
Perl
IndexError: list index out of range
Yukarıdaki örnekte, dizin oluşturma ikinci öğeden başlar (dizin bir, Gitmek). Bu nedenle, artış olurken, döngü beş öğe için sayımı tamamlayana kadar durmaz. Bu, dizini son öğeye kadar bir artmaya zorlar.
Bu nedenle, dilim kullanılamayacak beşinci bir dizine ulaşır. Yani bir dizin hatası atar. Bu, dizinin her öğe için aşağıdaki desende arttığı anlamına gelir:
1=1, 1+1=2, 1+2=3, 1+3=4, 1+4=5
Doğru desen yerine, ki bu:
0=0, 0+1=1, 1+1=2, 1+2=3, 1+3=4
Gördüğünüz gibi, yukarıdaki dizinin en yüksek değeri dört’tür, bu da döngü dizini sıfırdan artırarak başladığından beri doğrudur.
Bu nedenle, bu bölümdeki ilk örnekte yaptığınız gibi ilk dizini sıfıra ayarlamak “liste dizini aralık dışında” hatasını kaldırır:
index = 0 # Initial index
for i in Languages:
print(Languages(index))
index +=1 #Increase the index by one for each iteration
Öğelerin çıktısını ters sırada çıkarmak için bu kavramı uygulamak için, dizinin uzunluğundan bir tane çıkarmanız gerekir. Yani bu, endeksi dörtten başlayıp ilk endekse geri saymaya zorlar, sıfır.
Bu, bir kaynaktan gelen listenin uzunluk değerinden emin değilseniz, örneğin bir veritabanına yardımcı olur.
İşte bir örnek:
index = (len(Languages)-1)
for i in Languages:
print(Languages(index))
index -=1 #Decrease the index by one for each iteration
Output:
Perl
C
PHP
Go
Python
Ancak listenin uzunluğundan bir tanesinin çıkarılamaması “liste aralık dizini dışında” hatasını verir:
index = (len(Languages)-1)
for i in Languages:
print(Languages(index))
index -=1
Output:
IndexError: list index out of range
Yukarıdaki kod, listenin uzunluğu beş olduğundan bir dizin hatası verir ve en yüksek dizin dörtken, beşten sıfıra dizine dizin oluşturmayı başlatmaya çalışır. Yani listenin beşinci bir dizini (altıncı öğe) olmadığı anlamına gelir.
Python’da Yaratıcı İşleme Listeleri Alma
Python’un hataları insan dostudur ve genellikle okunabilir. Her zaman, bu onları makul ölçüde izlenebilir hale getirir.
Öğrendiğiniz gibi, liste dizinini aralık hatasından kaldırmak oldukça kolaydır. Gelecekteki programlarınızda bu hatayla karşılaşırsanız, listenin ne kadar karmaşık olduğuna bakılmaksızın, sorunu çözmek için bu yazıda açıklanan kavramları uygulayabilirsiniz.
Karmaşık listelerle yaratıcı olmak için çekinmeyin. Ayrıca, her şeyi daha iyi öğrenmek için boş zamanlarınızda Python’daki listeleri nasıl sıralayabileceğinizi öğrenmek isteyebilirsiniz.