Python ile bir listeyi belirtilen sayıda eleman kadar sağa kaydırın

Python kullanarak örnek algoritma sorularını çözdüğümüz serimizin ikinci sorusuna geçelim:

  1. Bir listeyi belirtilen sayıda eleman kadar sağa kaydırın.
    • Örnek: [1, 2, 3, 4, 5], k = 2
    • Sonuç: [4, 5, 1, 2, 3]

Diziyi belirli bir adet kaydırmak için rotate isimli bir fonksiyon oluşturdum. Python’da listelerle çalışırken dilimleme (slicing) yöntemini kullanarak bu işlemi kolaylıkla gerçekleştirebiliriz. Bakınız:

Kodu çalıştırmak için: Trinket

Kodumuzun açıklamasını maddeler halinde özetledik:

  • Fonksiyon içerisinde, k değerini dizi uzunluğuna göre mod alarak (yani kalanını alarak) dizi uzunluğundan fazla bir kaydırma yapmamak için kendi değerini güncelledim.

k %= len(nums): satırında, k değerini nums listesinin uzunluğuna mod alarak (yani kalanını alarak) güncelliyoruz. Bu, eğer k değeri nums‘in uzunluğundan büyükse veya ona eşitse, gereksiz dönüşleri ortadan kaldırmamızı sağlar. Örneğin, eğer bir liste 5 elemanlıysa ve bu listeyi 5 ya da 10 kez kaydırmak isterseniz, aslında hiç kaydırmamanız gerekiyor, çünkü bu durumda liste orijinal haliyle kalır. Yani listeyi 7 kere kaydırmak istersek, aslında sadece 2 kere kaydırmamız gerektiği anlamı çıkmaktadır.

  • Ardından nums[:] = nums[-k:] + nums[:-k]: ile dilimleme (slicing) yöntemi ile kaydırma işlemi gerçekleştirdim.
    • nums[-k:]: Dizinin son k elemanını alır. Örneğin, eğer k 2 ise ve listemiz [1, 2, 3, 4, 5] ise bu kısım bize [4, 5] verir (0, 1, 2 indeksindeki elemanlar atılır).
    • nums[:-k]: Dizinin başından son k elemanına kadar olan kısmını alır. Aynı listede bu kısım bize [1, 2, 3] listesini (-1, -2 indeksine sahip elemanlar atılır) verir.
    • Şimdi bu iki dilimlenmiş listeyi birleştirerek (+ operatörü ile) sorunun bizden istediği kaydırılmış listeyi elde ederiz. Yani, [4, 5] + [1, 2, 3] bize [4, 5, 1, 2, 3] sonucunu verir.
    • nums[:] = ...: Bu yapı ile orijinal nums listesinin tamamını (başından sonuna kadar olan kısmını) yeni kaydırılmış listeyle güncelliyoruz.

İlgili Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu