函数不对 python 中的列表切片起作用

Function doesn't act on the slice of a list in python

提问人:Aditya Wagh 提问时间:7/12/2020 最后编辑:Aditya Wagh 更新时间:7/12/2020 访问量:47

问:

我正在尝试按元素旋转长度数组。我反转了数组,然后反转了数组的两个部分并得出结果。arrnd0 to n-dn-d to n

from sys import stdin

def reverseArray(arr):
    for i in range(len(arr)//2):
        arr[i], arr[len(arr)-i-1] = arr[len(arr)-i-1], arr[i]
    return

def rotate(arr, n, d):
    reverseArray(arr)
    reverseArray(arr[0:n-d])
    reverseArray(arr[n-d:n])
    return

# Taking Input Using fast I/O
def takeInput() :
    n = int(stdin.readline().rstrip())
    if n == 0:
        return list(), 0

    arr = list(map(int, stdin.readline().rstrip().split(" ")))
    return arr, n


#to print the array/list 
def printList(arr, n) : 
    for i in range(n) :
        print(arr[i], end = " ")
    print()


#main
t = int(stdin.readline().rstrip())

while t > 0 :
    
    arr, n = takeInput()
    d = int(stdin.readline().rstrip())
    rotate(arr, n, d)
    printList(arr, n)
    
    t -= 1

输入:

1 # Test cases
6 # n
1 3 6 11 12 17 # elements of arr
4 # d

输出:

我的输出

17 12 11 6 3 1 

预期输出

12 17 1 3 6 11 

我不明白为什么我的反向函数适用于整个数组,但不适用于数组的切片。 由于列表是可变的,我认为我的函数应该更改切片。

当我将切片分配给变量,然后再次将反向值分配给切片时,它会起作用。

def rotate(arr, n, d):
    reverseArray(arr)
    
    fp = arr[0:n-d]
    sp = arr[n-d:n]
    
    reverseArray(fp)
    arr[0:n-d] =  fp
    
    reverseArray(sp)
    arr[n-d:n] = sp
    
    return
阵 列 列表 功能 可变

评论

1赞 Barmar 7/12/2020
切片会复制,因此您不会修改原始列表。
0赞 Barmar 7/12/2020
顺便说一句,这些是列表,而不是数组。
0赞 Mad Physicist 7/12/2020
此外,样品输入和预期输出速度较慢
0赞 Aditya Wagh 7/12/2020
哦,完全忘记了。

答: 暂无答案