如何通过引用将切片传递到函数中

ali*_*0.4 5 python pass-by-reference slice python-3.x

如果我有

a = [1, 2, 3]

def foo (arr):
    for i in len (arr): arr [i] += 1

def bar (arr):
    foo (arr[:2])

bar (a)
print (a)
Run Code Online (Sandbox Code Playgroud)

我想要输出为

>>> [2, 3, 3 ]
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

动机:我想要一个优先级队列,我可以在其中冻结最后一个N元素,即仅传递queue[:N]heapq.heappush(). 但是,每次我将切片传递给它或任何一般函数时,它都会向函数发送切片的副本而不是实际列表,因此我的列表最终保持不变。

Mat*_*ipp 5

如果 a 是一个数组,这将起作用numpy。默认情况下,numpy切片引用与原始数组相同的内存块。

import numpy as np
a = np.array([1, 2, 3])

def foo(arr):
    for i in range(len(arr)): arr[i] += 1
    # or just arr += 1

def bar(arr):
    foo(arr[:2])

bar(a)
print(a)
# [2, 3, 3 ]
Run Code Online (Sandbox Code Playgroud)


Nf4*_*f4r 1

老实说,我不会选择切片,而是只传递索引;

a = [1, 2, 3]
def foo(array, start, stop, jmp= 1):
    for idx in range(start, stop + 1, jmp):
        array[idx] += 1

def bar(array):
    foo(array, 1, 2)
bar(a)
print(a)
[1, 3, 4]
Run Code Online (Sandbox Code Playgroud)