Python,我该如何就地更改子数组?

时间:2019-02-12 00:16:28

标签: python list in-place sub-array

例如,我有一个函数

generator = DataLoader(ds)
for k in generator:
    print(k)

def foo(a):
    a[0],a[1] = a[1], a[0]

a = [1,2,3] 就地更改foo(a)的值,但a不变。 请帮助让我知道如何foo(a[:1])就地更改foo(a[:1])的值

2 个答案:

答案 0 :(得分:1)

正如其他人提到的那样,当您对列表进行切片时,它会创建一个新副本,而您正在就地进行修改。考虑以下任一情况:

def foo(a):
    a[0], a[1] = a[1], a[0]
    return a

a = [1,2,3]
a[1:] = foo(a[1:])

def foo(a, i=0):
    a[i], a[i+1] = a[i+1], a[i]

其中i是您的切片索引。

答案 1 :(得分:0)

您可以尝试使用索引。

def foo(a, n):
    a[n],a[n+1] = a[n+1], a[n]