Правильный список доступа к элементам списка - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь получить доступ к списку списка в Python 3.

a = [
     [ 1, 2, 3 ],
     [ 4, 5, 6 ],
     [ 7, 8, 9 ]
    ]

Мне нужен доступ ко второму и третьему элементам в крайнем правом столбце.Я хочу получить: [6, 9] в виде списка

, но,

from numpy import matrix
from numpy import array

a = [
     [ 1, 2, 3 ],
     [ 4, 5, 6 ],
     [ 7, 8, 9 ]
    ]

ab =    matrix(a)
ab[1:3][2]

ab =    array(a)
ab[1:3][2]

Ни один из них не работает.

Как правильно получить доступ к части элементов?

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Простая задача понимания списка:

In [507]: a = [
     ...:      [ 1, 2, 3 ],
     ...:      [ 4, 5, 6 ],
     ...:      [ 7, 8, 9 ]
     ...:     ]
     ...:     
In [508]: [x[2] for x in a[1:]]
Out[508]: [6, 9]

списки также имеют идиому «транспонирования» руки:

In [509]: list(zip(*a))
Out[509]: [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
In [510]: list(zip(*a))[2][1:]
Out[510]: (6, 9)

Если вы сделаете это в массиве

In [511]: np.array(a)
Out[511]: 
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
In [512]: np.array(a)[1:,2]
Out[512]: array([6, 9])

Обратите внимание, что я проиндексировал массив с помощью [1:, 2].Если я попытаюсь сделать это по частям:

In [513]: np.array(a)[1:3]
Out[513]: 
array([[4, 5, 6],
       [7, 8, 9]])   # still a 2d array
In [514]: _[2]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-514-084060d1880a> in <module>()
----> 1 _[2]

IndexError: index 2 is out of bounds for axis 0 with size 2

[1:3] выбирает правильные строки, но следующий `[2] пытается выбрать строки снова;он не выбирает из столбцов.Для этого используйте мои выражения.

0 голосов
/ 18 мая 2018

Взять столбец second, начиная со строки first:

In [27]: x = np.arange(1, 10).reshape(3,3)
# array([[1, 2, 3],
#        [4, 5, 6],
#        [7, 8, 9]])
In [31]: x[1:,2]
Out[31]: array([6, 9])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...