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:
- 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:
def rotate(nums, k):
k %= len(nums)
nums[:] = nums[-k:] + nums[:-k]
nums = [1, 2, 3, 4, 5]
k = 2
rotate(nums, k)
print(nums) # [4, 5, 1, 2, 3] 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 sonkelemanını alır. Örneğin, eğerk2 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 sonkelemanı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 orijinalnumslistesinin tamamını (başından sonuna kadar olan kısmını) yeni kaydırılmış listeyle güncelliyoruz.