Ana içeriğe geç

Listeler: N Boyutunda Parçalar

Bu eğitimde listelerle çalışacak ve keyfî boyutlardaki listeleri verilen boyutta parçalara ayırmanın verimli bir yolunu öğreneceksiniz.
· 5 dk. oku

Yapay Zeka ile Keşfedin

Listeler, Python'da farklı türde öğeleri saklayan ve bu öğelere verimli erişim sağlayan yerleşik veri yapılarıdır. Elinizdeki görev, listeleri N boyutunda parçalara bölmektir; bu, programınızın tek bir istekte işleyebileceği öğe sayısının sınırlı olduğu durumlarda yaygın bir uygulamadır.

Listeler

Listeler, kendi içinde karışık değerler veya öğeler tutabilen veri yapılarıdır. Örnek olarak tamsayılar, ondalık sayılar, dizgeler vb. verilebilir. Listeler değiştirilebilir (mutable) yapıdadır; yani, kimliğini değiştirmeden bir listenin içeriğini değiştirebilirsiniz. Köşeli parantezler [ ] ile yazılırlar ve içindeki öğeler virgül (,) ile ayrılır. Üzerinde çalışabileceğimiz bir sayı listesi oluşturalım...

# Creating a list of 95 numbers
list_numbers = list(range(1, 96))
print(list_numbers)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95]

range() fonksiyonu bir sayı dizisi üretir. Şu biçimdedir: range([start], stop[, step]); burada 'start' ve 'step' isteğe bağlıdır. start dizideki başlangıç sayısıdır, stop ise üretimin ulaşacağı ama dahil edilmeyecek sayıdır. step ise dizideki ardışık sayılar arasındaki farktır. Bu fonksiyon 0 tabanlıdır; yani başlangıç belirtilmediğinde liste indeksleri 1'den değil 0'dan başlar.

Şimdi, diyelim ki listeyi her biri 5 öğeden oluşan daha küçük listelere bölmeniz gerekiyor.

Bunu yapmanın bir yolu, bir generator tanımlamaktır. Generator, bir iterator tanımlamanın zarif bir yoludur. Peki iterator nedir? Basitçe söylemek gerekirse, yinelediğiniz bir nesnedeki bir sonraki öğeyi nasıl hesaplayacağını ve döndüreceğini bilen bir nesnedir. Iterator ve generator'lar hakkında daha fazla bilgiyi DataCamp'in Python Iterator Eğitiminde bulabilirsiniz.

Asıl işi bizim için yapan generator'ı barındıran bir fonksiyon tanımlıyoruz.

 # Yields successive 'n' sized chunks from list 'list_name'
def create_chunks(list_name, n):
    for i in range(0, len(list_name), n):
        yield list_name[i:i + n]

# Call the 'create_chunks' function to divide the list further into sub-lists of 10 items each
print(list(create_chunks(list_numbers, 10)))

[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15, 16, 17, 18, 19, 20], [21, 22, 23, 24, 25, 26, 27, 28, 29, 30], [31, 32, 33, 34, 35, 36, 37, 38, 39, 40], [41, 42, 43, 44, 45, 46, 47, 48, 49, 50], [51, 52, 53, 54, 55, 56, 57, 58, 59, 60], [61, 62, 63, 64, 65, 66, 67, 68, 69, 70], [71, 72, 73, 74, 75, 76, 77, 78, 79, 80], [81, 82, 83, 84, 85, 86, 87, 88, 89, 90], [91, 92, 93, 94, 95]]

Aynı işi yapmanın bir diğer yolu ise liste üreteçlerini (list comprehension) kullanmaktır. Bunun hakkında daha fazlasını DataCamp'in Python List Comprehension Eğitiminde okuyabilirsiniz.

print([list_numbers[i: i+10] for i in range(0, len(list_numbers), 10)])

[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15, 16, 17, 18, 19, 20], [21, 22, 23, 24, 25, 26, 27, 28, 29, 30], [31, 32, 33, 34, 35, 36, 37, 38, 39, 40], [41, 42, 43, 44, 45, 46, 47, 48, 49, 50], [51, 52, 53, 54, 55, 56, 57, 58, 59, 60], [61, 62, 63, 64, 65, 66, 67, 68, 69, 70], [71, 72, 73, 74, 75, 76, 77, 78, 79, 80], [81, 82, 83, 84, 85, 86, 87, 88, 89, 90], [91, 92, 93, 94, 95]]

Sorun karmaşıklaştıkça, list comprehension ifadeleri anlaşılması ve hata ayıklaması giderek zorlaşabilir. Bu nedenle, generator ile olduğu gibi temiz bir fonksiyon yazmak daha kullanışlı ve takibi daha kolay olabilir.

Bu eğitimde, listelerle çalışırken oldukça sık karşılaşılan bir sorunu çözmenin iki yolunu öğrendiniz. DataCamp'in Veri Bilimi için Veri Türleri kursuna göz atın.

Konular

İlgili