Python Programlama Dili

Bölüm 3

Veri Tipleri

Top Navigasyon

Ders 20

3.2.3 - Topluluk (Tuple) Tipi Verilere Uygulanabilen Metotlar

Topluluk tipi değerler, bir kez atandıktan sonra kısmen değiştirilemez (immutable) nitelikte değerlerdir. Bu nitelikte değerlere, liste tipi atandıktan sonra kısmen değişebilir (mutable) nitelikte değerlere uygulanabilen, append() gibi kısmi değişim metotları uygulanamaz. Bu nedenle, topluluk ve frozenset tipindeki verilere uygulanabilen çok az sayıda, öntanımlı metot ve fonksiyon bulunmaktadır.

İki koleksiyon tipi verinin birbirine denk gelen elemanlarını tek bir koleksiyonun elemanları olarak birleştiren zip() fonksiyonu, uygulamalarda çok kullanışlı olan bir fonksiyondur. Bu fonksiyonun geri döndürdüğü koleksiyonun veri tipi ve geri döndürdüğü veri yığının elemanlarına erişim, aşağıdaki örneklerde görülebilir.

Yukarıdaki örneklerden görüldüğü gibi, öntanımlı zip() fonksiyonu, her tipten koleksiyon verilerini birleştirerek, bir iterasyon yapılabilecek veri agregatı (yığın) oluşturmaktadır. Python programlama dilinde, iterasyon yapılabilecek veri yığınlarına iteratör denilir ve her iteratörün mutlaka bir veri tipi olması gerekmez. Öntanımlı zip() fonksiyonu tarafından geri döndürülen veri yığını, tanımlı hiçbir veri tipinde değil, özel zip tipinde bir veri yığınıdır.

İkinci programdan, özel zip tipi verilerin, indislenemediğini görüyoruz. Bu durumda bu verilerin elemanlarına while döngüleri ile sıralı erişim sağlanmasının olanağı bulunmamaktadır. Bu elemanların indis değerleri tanımlı olmadığından, tek tek elemanlarına erişim olası değildir.

Sonuncu programda, zip tipi verileri bir iteratör olduğu ve elemanlarının, her iki orijinal iteratörün denk gelen elemanları ile oluşmuş, iki elemanlı topluluklar olduğu, ve bu zip topluluklarının elemanlarına, for in döngülerinden yararlanılarak sıralı erişim sağlanabileceği anlaşılmaktadır.

Zip topluluklarının iç elemantlarına, iki döngü değişkenli for in döngülerinden yararlanılarak erişim sağlanabilir. Örnek,

Veya, daha sistematik olarak,

Zip verilerinin indislenemez olması, bir dezavantaj gibi görülürse bu fonksiyonu enumerate () fonksiyonu ile akuple ederek, indis görüntülü bir veri agregatı oluşturma olanağı bulunmaktadır. Bu tip bir veri yığının yapısı, aşağıdaki fonksiyonda görülmektedir.

Bu sonuçtan, oluşan iteratörün artık iki boyutlu olduğu, her elemanın bir dış topluktan oluştuğu, bu dış topluluğun ilk elemanının, enumerate () fonksiyonunun geri döndürdüğü sanal indis sayısı olduğu, ikinci elemanın bir iç topluluk olduğu ve bu iç topluluğun elemanlarının ziplenmiş orijinal iteratörlerin birbirlerine denk konumdaki elemanlarından oluştuğu görülmektedir. Bu veri yapısında, erişim sağlanan değerin konumunun görülmesi için, aşağıdaki programdan yararlanılabilir.

Tüm bu görüntülenen indis değerlerinin ve değerlerin sanal olduğu, bu sanal indis değerleri ile , ziplenmiş sanal değerlere erişim olanağı olmadığı iyi özümsenmelidir. Ziplenmiş değerlere sadece for in döngüleri ile sıralı erişim sağlanabilir.

Topluluklar üzerine, count() metodu uygulanabilir. Bu metot bir topluluk ve x de bu topluluğun bir elemanı olmak üzere, t.count(x) şeklinde uygulanarak, bu elemanın toplulukta bulunan sayısını döndürür. Örnek:

Topluluklar üzerine, index() metodu uygulanabilir. Bu metott bir topluluk ve x de bu topluluğun bir elemanı olmak üzere, t.index(x) şeklinde uygulanarak, bu elemanın toplulukta soldan başlayarak, ilk rastlandığı konumun indisini döndürür. Örnek:

Topluluklara uygulanan len(t) fonksiyonu, topluluktaki eleman sayısını döndürür.Bu konuda, daha önce örnekler verilmiştir.

Bir t iteratörü içinde içindeki tüm veriler 0 veya False ise all(t ), fonksiyonu geriye True, yoksa False döndürür. Bunu anyone is true? ve all of them is true? olarak düşününüz. Aşağıdaki tabloya bakınız,

  Any All
All Truthy values True True
All Falsy Values False False
At Least One Truthy True False
At Least One Falsy False False

Bu sonucu yukarıdaki doğruluk tablosu ile karşılaştıralım. Tüm1 ve daha büyük tamsayı değerleri "Doğru (True)" anlamındadır. İncelenen t topluluk verisinde, tüm elemanlar "Doğru (True)" değerindedir. Bu nedenle all(t) sonucu doğru olarak gerçekleşmiştir.

Burada ise, t1 topluluğunda, elemanlardan birisi 0 değerindedir. Sıfır değeri Yanlış (False) anlamınadır. Bu nedenle tüm koleksiyon elemanlarının doğru olup olmadığını sorgulayan a(t1) sorgusunun yanıtı, yanlış olarak gerçekleşmiştir.

Tüm koleksiyon elemanları içinde doğru bir eleman olup olmadığını sorgulayan any(t) sorgusunun yanıtı incelenen t koleksiyonunun elemanlarının hepsi doğru olduğu için, doğru olarak gerçekleşmiştir. Tüm elemanlar içinde sadece bir tane doğru diğerlerinin tümü yanlış da olsa, yanıt yine doğru olacaktı.

Bir koleksiyona uygulanan min() fonksiyonu, en küçük, max() fonksiyonu ise en büyük, değeri geri döndürür. sum() elementlerin toplamını verir. Yalnız, bu fonksiyonlar sadece homojen, tek boyutlu koleksiyonlar ile sonuç verebilir. Örnek,

Topluluklar değişmez veriler oldukklarından, bir kez atandıktan sonrai listeler gibi sort() metodu ile sıralanamazlar. Fakat atanmış bir topluluk, topluluklara uygulanabilen sorted() metodunun uygulanması ile, sıralanmış olarak başka bir değişkene değer olarak aktarılabilirler. Öntanımlı sorted() metodunun reverse ve key parameterleri vardır. Sıralama yöntemi üzerine bir yöntem , bir fonksiyonda tanımlanırsa, key parametresi ile bu fonksiyonun adı verilebilir. Reverse = True olunca büyükten küçüğe doğru sıralama yapılır. Örnek:

Koleksiyon tipi verilerin sığ ve derin kopyalanmalarını incelemiştik. Topluluklar için pg.copy() şeklinde, sığ kopyalama yöntemi uygulanamaz.

3.2.4 - Topluluk (Tuple) Tipi Verilerin Birbirleri ile Karşılaştırılmaları

İki topluluk verisini, eleman eleman karşılaştırırmak karşılaştırma işemcileri kullanılır. Bu g,b grup karşılaştırmalarının uygulama alanı çok azdır. Bu konuda bir uygulama örneği aşağıda görülmektedir.

Karşılştırma önce ilk elemanlar üzerine yapılır. Eğer eşitlik varsa, ikinci elemenlar denenir. Bu uygulamada da ilk elemanlar eşit oldukları için, karşılaştırma ikinci elemanlar arasında yapılmıştır. toplulukların incelenmesini burada tamamlıyor ve sözlük tipi verilere geçiyoruz.