Я немного экспериментировал с 2D-списками и массивами numpy. Из этого я поднял 3 вопроса, которым мне очень интересно знать ответ.
Во-первых, я инициализировал 2D-список python.
>>> my_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Затем я попытался индексировать список с помощью кортежа.
>>> my_list[:,]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not tuple
Поскольку интерпретатор бросает мне TypeError
и не SyntaxError
, я предположил, что это на самом деле можно сделать, но питон изначально не поддерживает его.
Затем я попытался преобразовать список в массив numpy
и сделать то же самое.
>>> np.array(my_list)[:,]
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
Конечно без проблем. Я понимаю, что один из __xx__()
был переопределен и реализован в пакете numpy
.
Также поддерживается индексирование индексирования:
>>> np.array(my_list)[:,[0, 1]]
array([[1, 2],
[4, 5],
[7, 8]])
Это подняло пару вопросов:
- Какой метод
__xx__
имеет numpy переопределен/определен для обработки фантазии индексации? - Почему списки python изначально не поддерживают причудливую индексацию?
(Бонусный вопрос: почему мои тайминги показывают, что резка в python2 медленнее, чем python3?)