Python, как я могу изменить на месте суб-массив? - PullRequest
0 голосов
/ 12 февраля 2019

Например, у меня есть функция

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

И

a = [1,2,3]

foo(a) меняет значение a на месте, а foo(a[:1]) - нет.Пожалуйста, помогите, дайте мне знать, как я могу foo(a[:1]) изменить значение a на месте

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Как уже упоминали другие, когда вы разрезаете список, он создает новую копию, которую вы вместо этого модифицируете на месте.Рассмотрим либо:

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 - ваш индекс среза.

0 голосов
/ 12 февраля 2019

Вы можете попробовать с индексом.

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