Как определить двумерный массив в Python - PullRequest
623 голосов
/ 12 июля 2011

Я хочу определить двумерный массив без инициализированной длины следующим образом:

Matrix = [][]

но это не работает ...

Я пробовал код ниже, но он тоже неправильный:

Matrix = [5][5]

Ошибка:

Traceback ...

IndexError: list index out of range

В чем моя ошибка?

Ответы [ 25 ]

10 голосов
/ 02 июля 2016

Переписать для удобства чтения:

# 2D array/ matrix

# 5 rows, 5 cols
rows_count = 5
cols_count = 5

# create
#     creation looks reverse
#     create an array of "cols_count" cols, for each of the "rows_count" rows
#        all elements are initialized to 0
two_d_array = [[0 for j in range(cols_count)] for i in range(rows_count)]

# index is from 0 to 4
#     for both rows & cols
#     since 5 rows, 5 cols

# use
two_d_array[0][0] = 1
print two_d_array[0][0]  # prints 1   # 1st row, 1st col (top-left element of matrix)

two_d_array[1][0] = 2
print two_d_array[1][0]  # prints 2   # 2nd row, 1st col

two_d_array[1][4] = 3
print two_d_array[1][4]  # prints 3   # 2nd row, last col

two_d_array[4][4] = 4
print two_d_array[4][4]  # prints 4   # last row, last col (right, bottom element of matrix)
9 голосов
/ 05 августа 2015

Использование:

matrix = [[0]*5 for i in range(5)]

* 5 для первого измерения работает, потому что на этом уровне данные неизменны.

9 голосов
/ 28 марта 2014

Я пишу свой первый скрипт на Python, и меня немного смутил пример квадратной матрицы, поэтому я надеюсь, что приведенный ниже пример поможет вам сэкономить время:

 # Creates a 2 x 5 matrix
 Matrix = [[0 for y in xrange(5)] for x in xrange(2)]

так что

Matrix[1][4] = 2 # Valid
Matrix[4][1] = 3 # IndexError: list index out of range
8 голосов
/ 15 сентября 2017

Используя NumPy, вы можете инициализировать пустую матрицу следующим образом:

import numpy as np
mm = np.matrix([])

И позже добавьте данные как это:

mm = np.append(mm, [[1,2]], axis=1)
6 голосов
/ 03 июня 2018

Так я обычно создаю двумерные массивы в python.

col = 3
row = 4
array = [[0] * col for _ in range(row)]

Мне кажется, что этот синтаксис легко запомнить по сравнению с использованием циклов for в понимании списка.

6 голосов
/ 04 сентября 2013

Я читаю в файлах, разделенных запятыми, вот так:

data=[]
for l in infile:
    l = split(',')
    data.append(l)

Список «data» - это список списков с индексными данными [row] [col]

5 голосов
/ 14 июля 2016

Если вы хотите иметь возможность думать о нем как о двумерном массиве, а не думать о нем в виде списка списков (на мой взгляд, это более естественно), вы можете сделать следующее:

import numpy
Nx=3; Ny=4
my2Dlist= numpy.zeros((Nx,Ny)).tolist()

Результатом является список (не массив NumPy), и вы можете перезаписать отдельные позиции числами, строками и т. Д.

4 голосов
/ 16 января 2017

Вот для чего словарь создан!

matrix = {}

Вы можете определить ключи и значения двумя способами:

matrix[0,0] = value

или

matrix = { (0,0)  : value }

Результат:

   [ value,  value,  value,  value,  value],
   [ value,  value,  value,  value,  value],
   ...
4 голосов
/ 01 ноября 2015

Использование:

import copy

def ndlist(*args, init=0):
    dp = init
    for x in reversed(args):
        dp = [copy.deepcopy(dp) for _ in range(x)]
    return dp

l = ndlist(1,2,3,4) # 4 dimensional list initialized with 0's
l[0][1][2][3] = 1

Я думаю, NumPy - это путь.Выше приведено общее, если вы не хотите использовать NumPy.

2 голосов
/ 05 августа 2017

Если у вас нет информации о размере до запуска, создайте два одномерных списка.

список 1: для хранения строк Список 2: Актуальная двумерная матрица

Сохранить всю строку в первом списке. После этого добавьте список 1 в список 2:

from random import randint


coordinates=[]
temp=[]
points=int(raw_input("Enter No Of Coordinates >"))
for i in range(0,points):
    randomx=randint(0,1000)
    randomy=randint(0,1000)
    temp=[]
    temp.append(randomx)
    temp.append(randomy)
    coordinates.append(temp)

print coordinates

Выход:

Enter No Of Coordinates >4
[[522, 96], [378, 276], [349, 741], [238, 439]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...