Program python untuk menggeser elemen dalam daftar

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 l

Beberapa 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

Program python untuk menggeser elemen dalam daftar

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]
0
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]
1
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]
2
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]
3
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]
2
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]
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________g

Bisakah Anda mengubah elemen dalam daftar Python?

Anda dapat mengganti item dalam daftar Python menggunakan pengindeksan daftar, pemahaman daftar, atau for loop . Jika Anda ingin mengganti satu nilai dalam daftar, sintaks pengindeksan paling tepat.

Bagaimana Anda menggeser elemen ke kanan dengan Python?

LANGKAH 3. Array dapat diputar ke kanan dengan menggeser elemen-elemennya ke posisi di sebelahnya yang dapat dilakukan dengan memutar ulang array dalam urutan terbalik (loop akan dimulai dari panjang array -1 hingga . .

Bagaimana Anda menggeser nilai dalam array dengan Python?

Untuk menggeser bit elemen array dari array 2D ke kiri, gunakan numpy. left_shift() dengan Python Numpy. Bit digeser ke kiri dengan menambahkan x2 0s di sebelah kanan x1. Karena representasi internal angka dalam format biner, operasi ini setara dengan mengalikan x1 dengan 2**x2.

Bagaimana Anda bergeser ke kiri dengan satu posisi di Python?

Operator geser kiri bitwise Python x << n menggeser representasi biner bilangan bulat x dengan n posisi ke kiri. Untuk bilangan bulat positif, ia menyisipkan bit 0 di sebelah kanan dan menggeser semua bit yang tersisa dengan satu posisi ke kiri.