Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Quay phải danh sách (right rotate) trong Python

Cho danh sách và số bước quay n, dịch chuyển các phần tử sang phải n vị trí. Phần tử bị đẩy ra cuối sẽ quay về đầu.

Ví dụ

Input:  A = [2, 4, 5, 12, 90], n = 3
Output: [12, 90, 2, 4, 5]  # hoặc [90, 12, 2, 4, 5] tùy định nghĩa

Phương pháp 1: Vòng lặp

def right_rotation(my_list, num):
    output_list = []
    # Lấy n phần tử cuối
    for item in range(len(my_list) - num, len(my_list)):
        output_list.append(my_list[item])
    # Lấy phần còn lại
    for item in range(0, len(my_list) - num):
        output_list.append(my_list[item])
    return output_list

Phương pháp 2: Slicing (khuyên dùng)

def right_rotate_slice(lst, n):
    n = n % len(lst)  # xử lý n > len(lst)
    return lst[-n:] + lst[:-n]

# Test
A = [11, 22, 33, 44, 55, 66]
print(right_rotate_slice(A, 3))  # [44, 55, 66, 11, 22, 33]

Phương pháp 3: Slicing ngắn gọn

A = [11, 22, 33, 44, 55, 66]
n = 3
A = A[-n:] + A[:-n]
print(A)  # [44, 55, 66, 11, 22, 33]

So sánh

Phương phápĐộ phức tạpĐộ đọcGhi chú
Vòng lặpO(n)ThấpDễ hiểu cho người mới
SlicingO(n)CaoPythonic, ngắn gọn, hiệu quả

Quay trái (left rotate)

def left_rotate(lst, n):
    n = n % len(lst)
    return lst[n:] + lst[:n]