python 理解循环旋转编码的挑战吗

7dl7o3gd  于 2023-06-04  发布在  Python
关注(0)|答案(6)|浏览(107)

我想先谢谢你的帮助。
我正在解决循环旋转问题,你必须将列表/数组的内容向右移动,并有效地将元素 Package 起来,例如:
例如,给定

A = [3, 8, 9, 7, 6]
 K = 3

函数返回[9,7,6,3,8]。进行了三次旋转:

[3, 8, 9, 7, 6] -> [6, 3, 8, 9, 7]
 [6, 3, 8, 9, 7] -> [7, 6, 3, 8, 9]
 [7, 6, 3, 8, 9] -> [9, 7, 6, 3, 8]

代码如下:

def solution(A, K):
    new_list = []
    first_index = 0
    for i in range(0, K):
        for num in range(0, len(A) - 1):
            new_list.insert(0, A.pop())
            print('new list {}'.format(new_list))
            print('old list {}'.format(A))
            if len(new_list) == 3:
                new_list.insert(len(new_list), A.pop(first_index))
                print(new_list)

经过3次旋转,我得到了列表A = [8,9,7,6,3],所以对我来说,它似乎将A的最后一个元素放在了new_list的前面。
所以任何帮助或正确的方向将是有益的再次感谢你。

vhipe2zx

vhipe2zx1#

你可以简单地用这段代码来做。

def solution(A, K):
    K = K % len(A)
    return A[-K:] + A[:-K]

你可以在这里查看更多的方法来做到这一点。Efficient way to rotate a list in python

v1uwarro

v1uwarro2#

所以我意识到我只需要循环K次并检查一个空列表。最后我得到的是:

def solution(A, K):
    for i in range(0, K): # will perform K iterations of the below code
        if A == []: # check if list is empty
            return A # return A if A is the empty list
        A.insert(0, A.pop()) # inserts at the first index of A the last element of A
    return A # will return the list A
qnyhuwrf

qnyhuwrf3#

另一个解决方案是从collections模块使用deque。它有一个内置的旋转功能。

from collections import deque
def solution(A, K):
    m=deque(A)
    m.rotate(K)
    return list(m)
ff29svar

ff29svar4#

def slice(A):
    B = []
    for i  in range(0,len(A)) :
        B.append(A[-1+i])
    return B 

def solution(A, K):
    for i in range (1,K+1):
        A = slice(A)
    return A
8ehkhllq

8ehkhllq5#

def solution(A,K):        
    for k in np.arange(K):
        B=[]
        for i in range(len(A)):
            B.append(A[i-1])
        A=B
    return B
pgx2nnw8

pgx2nnw86#

我发现的解决方案似乎更像是一个干净的代码

def solution(A, K):

        n = len(A)`enter code here`
        K = K % n # Ensure K is within the range of array size 
        rotated_arr = A[K:] + A[:K] # Rotating from end to the starting
        return rotated_arr
    A = [1, 2, 3, 4]
    K = int(input())
    rotated_arr = solution(A, K)
    print(rotated_arr)

相关问题