📜  Python程序将列表右旋转n

📅  最后修改于: 2022-05-13 01:54:34.572000             🧑  作者: Mango

Python程序将列表右旋转n

给定一个列表和一个整数n ,编写一个Python程序将列表右旋 n 个位置。

例子 :

方法#1:逐个遍历第一个列表,然后将元素放在第二个列表中的所需位置。

Python3
# Python program to right rotate a list by n
 
# Returns the rotated list
 
def rightRotate(lists, num):
    output_list = []
 
    # Will add values from n to the new list
    for item in range(len(lists) - num, len(lists)):
        output_list.append(lists[item])
 
    # Will add the values before
    # n to the end of new list
    for item in range(0, len(lists) - num):
        output_list.append(lists[item])
 
    return output_list
 
 
# Driver Code
rotate_num = 3
list_1 = [1, 2, 3, 4, 5, 6]
 
print(rightRotate(list_1, rotate_num))


Python3
# Python program to right rotate
# a list by n using list slicing
n = 3
 
list_1 = [1, 2, 3, 4, 5, 6]
list_1 = (list_1[len(list_1) - n:len(list_1)]
                 + list_1[0:len(list_1) - n])
print(list_1)


Python
# Right Rotating a list to n positions
n = 3
 
list_1 = [1, 2, 3, 4, 5, 6]
if n>len(list_1):
    n = int(n%len(list_1))
list_1 = (list_1[-n:] + list_1[:-n])
 
print(list_1)


输出
[4, 5, 6, 1, 2, 3]

时间复杂度:O(n)

方法#2:另一种通过使用切片技术解决此问题的方法。切片列表的一种方法是使用len()方法。

Python3

# Python program to right rotate
# a list by n using list slicing
n = 3
 
list_1 = [1, 2, 3, 4, 5, 6]
list_1 = (list_1[len(list_1) - n:len(list_1)]
                 + list_1[0:len(list_1) - n])
print(list_1)
输出
[4, 5, 6, 1, 2, 3]

方法#3:在上述方法中,取list_1 的最后n 个元素,然后取list_1 的剩余元素。另一种方法是不使用 len() 方法。

Python

# Right Rotating a list to n positions
n = 3
 
list_1 = [1, 2, 3, 4, 5, 6]
if n>len(list_1):
    n = int(n%len(list_1))
list_1 = (list_1[-n:] + list_1[:-n])
 
print(list_1)
输出
[4, 5, 6, 1, 2, 3]

时间复杂度:O(n)

注意: list_1[:] 将返回整个列表,因为切片运算符左侧的空格是指列表的开头,即 0,右侧的空格是指列表的结束位置。