2D массивы в Python

Я подозреваю, что ваши пути к node_modules должны быть относительными - "../node_modules/

24
задан user 26 February 2014 в 00:11
поделиться

6 ответов

>>> a = []

>>> for i in xrange(3):
...     a.append([])
...     for j in xrange(3):
...             a[i].append(i+j)
...
>>> a
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]
>>>
22
ответ дан 28 November 2019 в 22:56
поделиться

В зависимости от того, что вы делаете, у вас может не быть двухмерного массива.

В 80% случаев у вас есть простой список «строковых объектов», которые могут быть правильными последовательностями.

myArray = [ ('pi',3.14159,'r',2), ('e',2.71828,'theta',.5) ]

myArray[0][1] == 3.14159
myArray[1][1] == 2.71828

Чаще всего это экземпляры класса или словаря, или набора, или чего-то более интересного, чего у вас не было в ваших предыдущих языках.

myArray = [ {'pi':3.1415925,'r':2}, {'e':2.71828,'theta':.5} ]

В 20% случаев у вас есть словарь с парным ключом

myArray = { (2009,'aug'):(some,tuple,of,values), (2009,'sep'):(some,other,tuple) }

В редких случаях вам действительно понадобится матрица.

У вас очень большое количество классов коллекций в Python. Велика вероятность, что у вас есть что-то более интересное, чем матрица.

10
ответ дан 28 November 2019 в 22:56
поделиться

В Python для этой цели обычно используются списки . Списки могут быть вложены произвольно, что позволяет создавать 2D-массив. Не все подсписки должны быть одинакового размера, чтобы решить вашу другую проблему. Взгляните на примеры, на которые я дал ссылку.

9
ответ дан 28 November 2019 в 22:56
поделиться

Я бы посоветовал вам использовать такой словарь:

arr = {}

arr[1] = (1, 2, 4)
arr[18] = (3, 4, 5)

print(arr[1])
>>> (1, 2, 4)

Если вы не уверены, что запись определена в словаре, вам понадобится механизм проверки при вызове «arr [x]», например try- за исключением.

5
ответ дан 28 November 2019 в 22:56
поделиться

Если вы хотите серьезно поработать с массивами, вам следует использовать библиотеку numpy . Это позволит вам, например, выполнять сложение векторов и умножение матриц, а для больших массивов это намного быстрее, чем списки Python.

Однако numpy требует, чтобы размер был предварительно определен. Конечно, вы также можете хранить несколько массивов в виде списка, например:

import numpy as np
vec_list = [np.zeros((3,)) for _ in range(10)]
vec_list.append(np.array([1,2,3]))
vec_sum = vec_list[0] + vec_list[1]  # possible because we use numpy
print vec_list[10][2]  # prints 3

Но поскольку ваши массивы numpy довольно малы, я предполагаю, что есть некоторые накладные расходы по сравнению с использованием кортежа. Все зависит от ваших приоритетов.

См. Также другой вопрос , который очень похож (за исключением переменного размера).

7
ответ дан 28 November 2019 в 22:56
поделиться

If you are concerned about memory footprint, the Python standard library contains the array module; these arrays contain elements of the same type.

3
ответ дан 28 November 2019 в 22:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: