Saya menggunakan ide yang sama yang Anda miliki. elemen pop di sebelah kiri dan menambahkannya di sebelah kanan. Namun, alih-alih rekursi, saya mengambil semua elemen yang saya butuhkan untuk muncul sekaligus, dengan mengambil n % len(l) (karena hasil menggeser daftar 5 elemen sebanyak 7 kali sama dengan hasil menggesernya 2 kali). Pendekatan ini lebih sederhana dan menggunakan lebih sedikit ruang daripada pendekatan rekursif Anda
Untuk mengubah daftar asli, saya menggunakan metode extend, yang berguna jika Anda ingin memperluas daftar dengan elemen dari daftar lain alih-alih menambahkannya satu per satu
def shift_left(l, n): """ In place shift n elements of list l to the left. Won't work on strings. """ n = n % len(l) head = l[:n] l[:n] = [] l.extend(head) return lBeberapa tes unit, demi kewarasan
import unittest from random import randrange class TestShiftLeft(unittest.TestCase): def test_zero_shifts(self): self.assertEqual([1], shift_left([1], 0)) self.assertEqual([1, 2], shift_left([1, 2], 0)) def test_single_element(self): self.assertEqual([1], shift_left([1], 1)) self.assertEqual([1], shift_left([1], 2)) self.assertEqual([1], shift_left([1], 3)) def test_two_elements(self): self.assertEqual([2, 1], shift_left([1, 2], 1)) self.assertEqual([1, 2], shift_left([1, 2], 2)) self.assertEqual([2, 1], shift_left([1, 2], 3)) self.assertEqual([1, 2], shift_left([1, 2], 4)) def test_odd_number_elements(self): self.assertEqual([2, 3, 1], shift_left([1, 2, 3], 1)) self.assertEqual([3, 1, 2], shift_left([1, 2, 3], 2)) self.assertEqual([1, 2, 3], shift_left([1, 2, 3], 3)) self.assertEqual([2, 3, 1], shift_left([1, 2, 3], 4)) def test_even_number_elements(self): self.assertEqual([2, 3, 4, 1], shift_left([1, 2, 3, 4], 1)) self.assertEqual([3, 4, 1, 2], shift_left([1, 2, 3, 4], 2)) self.assertEqual([4, 1, 2, 3], shift_left([1, 2, 3, 4], 3)) self.assertEqual([1, 2, 3, 4], shift_left([1, 2, 3, 4], 4)) self.assertEqual([2, 3, 4, 1], shift_left([1, 2, 3, 4], 5)) def test_len_l_shift(self): l = list(range(randrange(1000))) self.assertEqual(l, shift_left(l, len(l))) if __name__ == '__main__': unittest.main() _Dalam program ini, kita perlu memutar elemen-elemen array ke kanan dengan jumlah yang ditentukan. Suatu larik dikatakan berotasi ke kanan jika semua elemen larik tersebut dipindahkan ke kanannya dengan satu posisi. Salah satu pendekatannya adalah mengulang array dengan menggeser setiap elemen array ke posisi berikutnya. Elemen terakhir dari array akan menjadi elemen pertama dari array yang diputar
Perhatikan larik di atas, jika n adalah 1 maka semua elemen larik akan dipindahkan ke kanan dengan satu posisi yaitu elemen pertama larik akan menempati posisi kedua, elemen kedua akan dipindahkan ke posisi ketiga dan seterusnya . Elemen terakhir dari array akan menjadi elemen pertama dari array
Rotasi siklik telah dibahas dalam artikel sebelumnya. Namun terkadang, kami hanya memerlukan tugas tertentu, bagian dari rotasi i. e menggeser elemen terakhir ke elemen pertama dalam daftar. Ini memiliki aplikasi dalam pemrograman sehari-hari di utilitas tertentu. Mari kita bahas cara-cara tertentu untuk mencapai hal ini.
Metode #1. Menggunakan pengiris daftar dan operator “+” Kombinasi dari fungsi-fungsi ini dapat digunakan untuk melakukan tugas satu shift dalam daftar. Elemen terakhir ditambahkan ke sisa daftar untuk mencapai tugas ini menggunakan slicing.
Python3
# Python3 code to demonstrate
# shift last element to first
# using list slicing and "+" operator
# initializing list
test_list= The original list is : [1, 4, 5, 6, 7, 8, 9, 12] The list after shift is : [12, 1, 4, 5, 6, 7, 8, 9]0The original list is : [1, 4, 5, 6, 7, 8, 9, 12] The list after shift is : [12, 1, 4, 5, 6, 7, 8, 9]1The original list is : [1, 4, 5, 6, 7, 8, 9, 12] The list after shift is : [12, 1, 4, 5, 6, 7, 8, 9]2The original list is : [1, 4, 5, 6, 7, 8, 9, 12] The list after shift is : [12, 1, 4, 5, 6, 7, 8, 9]3The original list is : [1, 4, 5, 6, 7, 8, 9, 12] The list after shift is : [12, 1, 4, 5, 6, 7, 8, 9]2The original list is : [1, 4, 5, 6, 7, 8, 9, 12] The list after shift is : [12, 1, 4, 5, 6, 7, 8, 9]_______________________________________________________________________________________________________________________________________________________________________________________________________________________________g