python: поменять местами части двух массивов - PullRequest
0 голосов
/ 22 октября 2018

Предположим, у меня есть два списка в python:

>>> x
[0, 1, 2, 3, 4, 5]
>>> y
[0, -1, -2, -3, -4, -5]

Предположим, я хочу поменять элементы массивов с некоторого индекса до конца.Так что, если, например, я позволю индексу = 3, тогда я хочу следующее:

>>> x
[0, 1, 2, -3, -4, -5]
>>> y
[0, -1, -2, 3, 4, 5]

Это легко сделать:

>>> tempx=x[:3]+y[3:]
>>> tempx
[0, 1, 2, -3, -4, -5]
>>> tempy=y[:3]+x[3:]
>>> tempx
[0, 1, 2, -3, -4, -5]
>>> tempy
[0, -1, -2, 3, 4, 5]
>>> x=tempx
>>> y=tempy
>>> x
[0, 1, 2, -3, -4, -5]
>>> y
[0, -1, -2, 3, 4, 5]

Но если x и y пустыемассивы, это не работает.

>>> x=[0,1, 2, 3, 4, 5]
>>> y=[0,-1,-2,-3,-4,-5]
>>> import numpy as np
>>> x=np.array(x)
>>> y=np.array(y)
>>> x
array([0, 1, 2, 3, 4, 5])
>>> y
array([ 0, -1, -2, -3, -4, -5])
>>> tempy=y[:3]+x[3:]
>>> tempy
array([3, 3, 3])
>>> tempy=[y[:3],+x[3:]]
>>> tempy
[array([ 0, -1, -2]), array([3, 4, 5])]
>>> tempy=(y[:3],+x[3:])
>>> tempy
(array([ 0, -1, -2]), array([3, 4, 5]))

Как получить следующее?

>>> tempx
array([0, 1, 2, -3, -4, -5])
>>> tempy
array([0, -1, -2, 3, 4, 5])

1 Ответ

0 голосов
/ 22 октября 2018

Менять местами списочные фрагменты проще, чем вы думаете.

x = [1,2,3]
y = [11,22,33]

x[1:], y[1:] = y[1:], x[1:]

>>> x
[1, 22, 33]
>>> y
[11, 2, 3]

Это не сработает, если использовать базовые фрагменты как представления, а не как копии.Вы все равно можете сделать явную копию, если хотите.

x = np.array(range(6))
y = -np.array(range(6))

temp = x[3:].copy()
x[3:] = y[3:]
y[3:] = temp

И, если вы тщательно продумываете порядок операций, вы все равно можете сделать это в одной строке без явной временной переменной.

x[3:], y[3:] = y[3:], x[3:].copy()

В любом случае, мы получаем

>>> x
array([ 0,  1,  2, -3, -4, -5])
>>> y
array([ 0, -1, -2,  3,  4,  5])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...