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

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

Matrix = [][]

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

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

Matrix = [5][5]

Ошибка:

Traceback ...

IndexError: list index out of range

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


person Masoud Abasian    schedule 12.07.2011    source источник
comment
Никто не определяет массивы или что-то еще. Однако вы можете создавать многомерные последовательности, как показывают ответы здесь. Помните, что переменные python не типизированы, а значения строго типизированы.   -  person SingleNegationElimination    schedule 12.07.2011
comment
Я запутался. Исходя из других языков: это разница между 1D-массивом, содержащим 1D-массивы, и 2D-массивом. И AFAIK нет возможности иметь многомерный массив (или список) в python. Здесь следует сказать ...   -  person Dirk Reichel    schedule 05.06.2018
comment
См. Также FAQ Python3 на странице Как создать многомерный список?   -  person Kevin W Matthews    schedule 18.08.2019


Ответы (28)


Технически вы пытаетесь проиндексировать неинициализированный массив. Перед добавлением элементов необходимо сначала инициализировать внешний список списками; Python называет это «пониманием списка».

# Creates a list containing 5 lists, each of 8 items, all set to 0
w, h = 8, 5;
Matrix = [[0 for x in range(w)] for y in range(h)] 

Теперь вы можете добавлять элементы в список:

Matrix[0][0] = 1
Matrix[6][0] = 3 # error! range... 
Matrix[0][6] = 3 # valid

Обратите внимание, что матрица является основным адресом «y», другими словами, «индекс y» стоит перед «индексом x».

print Matrix[0][0] # prints 1
x, y = 0, 6 
print Matrix[x][y] # prints 3; be careful with indexing! 

Хотя вы можете называть их как хотите, я смотрю на это таким образом, чтобы избежать некоторой путаницы, которая может возникнуть при индексировании, если вы используете «x» как для внутреннего, так и для внешнего списков и хотите получить неквадратную матрицу.

person Manny D    schedule 12.07.2011
comment
[[0 для x в диапазоне (cols_count)] для x в диапазоне (rows_count)] - person songhir; 27.11.2014
comment
Странное редактирование ademar111190. В Python 3 нет xrange, но если вы должны использовать Python 2, тогда xrange - это правильная функция, если вы не хотите без необходимости создавать объекты. - person Dave; 25.11.2015
comment
@dave Если он вам не нужен, можно использовать range для непосредственного создания внутренних списков: [range(5) for x in range(5)] - person alanjds; 10.12.2015
comment
@alanjds - это правда, но вы все равно создаете потенциально много ненужных ссылок на объекты в Python 2 для внешней итерации (попробуйте это с ОЧЕНЬ большим диапазоном). Кроме того, инициализация некоторым значением - это почти всегда то, что вы хотите - и это чаще всего 0. range дает итеративную коллекцию - xrange возвращает генератор. Моя точка зрения заключалась в том, что Адемар исправил что-то, что на самом деле было более правильным и эффективным, чем его исправление. - person Dave; 10.12.2015
comment
w, h = 8, 5. следует исправить на w, h = 8, 5; Эта конечная десятичная дробь делает некоторые странные вещи с определением переменной для h - person JJFord3; 15.11.2016
comment
Разве следующее не было бы более кратким ?: [[0] * w] * h - person Aaron S; 25.04.2017
comment
@ 6packkid [0] * w часть хороша, но [[0] * w] * h] вызовет неожиданное поведение. Попробуйте mat = [[0] * 3] * 3; mat[0][1] = 10; print(mat == [[0, 10, 0], [0, 10, 0], [0, 10, 0]]) и mat = [[0] * 3 for i in range(3)]; mat[0][1] = 10; print(mat == [[0, 10, 0], [0, 0, 0], [0, 0, 0]]). - person senderle; 19.07.2017
comment
этот метод позволит избежать проблем со ссылками для каждой строки. Благодарю. - person carton.swing; 26.05.2018
comment
Если количество подсписок h, не должен ли первый индекс быть y? Как в Matrix [y] [x]. Я думаю, вы имели в виду Matrix = [[0 для y в диапазоне (h)] для x в диапазоне (w)], и в этом случае вы можете использовать Matrix [x] [y]. - person Zuzu Corneliu; 30.06.2018
comment
Вы перевернули свою ширину и высоту на матрице. Matrix = [[0 for x in range(w)] for y in range(h)] доступен Matrix[y][x], а не Matrix[x][y]. Просто попробуйте запустить Matrix[7][2] и посмотрите, что у вас получится. - person rovyko; 25.08.2018
comment
@ 6packkid это использует тот же массив h раз (и, следовательно, изменение одного массива влияет на все строки). Попробуйте например test = [[0]*3]*5; test[1][1]=7; print(test) - person Marc Van Daele; 15.10.2018
comment
Вы также можете сделать это: array = [[]] - person Dwa; 04.12.2019
comment
Матрица = [[0 для столбца в диапазоне (w)] для строки в диапазоне (h)] - person jack; 29.08.2020
comment
очередь редактирования заполнена, поэтому оставьте комментарий .. удалите точку с запятой в конце этой строки w, h = 8, 5; - person D.L; 29.04.2021

Если вам действительно нужна матрица, возможно, вам лучше использовать numpy. Матричные операции в numpy чаще всего используют тип массива с двумя измерениями. Есть много способов создать новый массив; одной из наиболее полезных является функция zeros, которая принимает параметр формы и возвращает массив данной формы со значениями, инициализированными равными нулю:

>>> import numpy
>>> numpy.zeros((5, 5))
array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]])

Вот еще несколько способов создания двумерных массивов и матриц (с удалением вывода для компактности):

numpy.arange(25).reshape((5, 5))         # create a 1-d range and reshape
numpy.array(range(25)).reshape((5, 5))   # pass a Python range and reshape
numpy.array([5] * 25).reshape((5, 5))    # pass a Python list and reshape
numpy.empty((5, 5))                      # allocate, but don't initialize
numpy.ones((5, 5))                       # initialize with ones

numpy также предоставляет тип matrix, но больше не рекомендуется для любого использования и может быть удален из numpy в будущем.

person senderle    schedule 12.07.2011
comment
Всякий раз, когда вам нужны матрицы, вы хотите использовать numpy. Этот ответ должен быть первым. - person Pat B; 12.07.2011
comment
Тот факт, что в вопросе используется матрица английских слов, не означает, что они должны использовать np.matrix для ее представления. Правильный способ представления матрицы в numpy - использовать array. - person user2357112 supports Monica; 05.11.2017
comment
@ user2357112, И, как видите, большинство примеров, перечисленных выше, выводят arrays вместо матриц. Хотя это не всегда поощряется, есть законные причины для использования matrix - контекст имеет значение. - person senderle; 06.11.2017
comment
@senderle, можешь подробнее рассказать о причинах использования matrix? Поскольку был введен оператор @, похоже, на одну причину меньше с момента написания этого сообщения. - person jpp; 14.07.2018
comment
@jpp, как ранее говорилось в сообщении, люди, пришедшие из Matlab, могут найти его полезным. Но в numpy документах теперь указано, что этот класс может быть объявлен устаревшим и удален. в будущем, поэтому я исключил его из ответа. - person senderle; 01.02.2020
comment
numpy является оптимальным, если все элементы матрицы одного типа. если элементы не одного типа (например, int, float, bool, str), тогда нужна обычная матрица Python. - person D.L; 29.04.2021

Вот более короткое обозначение для инициализации списка списков:

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

К сожалению, сокращение этого до чего-то вроде 5*[5*[0]] на самом деле не работает, потому что вы получаете 5 копий одного и того же списка, поэтому, когда вы изменяете одну из них, все они изменяются, например:

>>> matrix = 5*[5*[0]]
>>> matrix
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
>>> matrix[4][4] = 2
>>> matrix
[[0, 0, 0, 0, 2], [0, 0, 0, 0, 2], [0, 0, 0, 0, 2], [0, 0, 0, 0, 2], [0, 0, 0, 0, 2]]
person Andrew Clark    schedule 12.07.2011
comment
Не могли бы вы объяснить логику отказа от сокращения? Почему в этом случае python выводит копии одного и того же списка, а в случае [0]*5 - массив разных ячеек? - person mike622867; 23.03.2015
comment
Приведенные выше комментарии не совсем верны: [0] * 5 по-прежнему создает последовательность с 5-кратной ссылкой на тот же объект, представляющий число 0. Но вы никогда этого не заметите, потому что 0 неизменен (я бы сказал, что 0 ведет себя как значение - или вы можете думать об этом как о примитивном типе данных - потому что он неизменяемый, поэтому у вас никогда не будет проблем со ссылками на один и тот же объект вместо наличия копий.) - person dreua; 26.01.2018
comment
больше pythonic: [[0]*5 for _ in range(5)] с анонимным счетчиком циклов, который вы не используете - person Jean-François Fabre; 11.11.2018
comment
Приятно, что вы указали на проблему неглубокого копирования во втором примере. - person whatacold; 08.12.2019
comment
спасибо @dreua, я действительно был сбит с толку, как [0]*5 работает нормально. Теперь я понимаю, почему [{0}]*8 тоже было бы плохой идеей. - person kuku; 07.03.2020
comment
@kuku, что означает [{0}] в Python? - person apadana; 24.05.2020
comment
@ Jean-FrançoisFabre это выглядит приятнее на вид, но обратите внимание, что _ на самом деле не анонимный связыватель, это допустимое имя переменной, например [_ for _ in range(5)] создает список [0, 1, 2, 3, 4]. - person Maëlan; 22.11.2020
comment
это анонимно по умыслу. он говорит вам, что вы не должны использовать идентификатор. - person Jean-François Fabre; 22.11.2020
comment
Замечание по выбрасыванию К сожалению, сокращение этого до чего-то вроде 5 * [5 * [0]] на самом деле не работает, должно быть намного выше на этой странице, так как это не очевидно для многих людей. - person jcansell; 07.01.2021
comment
Да, и документ python3 также упоминает это . - person Brainor; 05.07.2021

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

matrix = [[]]

И если вы хотите сгенерировать матрицу размера 5, заполненную 0,

matrix = [[0 for i in xrange(5)] for i in xrange(5)]
person mripard    schedule 12.07.2011
comment
@KorayTugay Поскольку матрица представлена ​​с использованием списков Python (строк), вложенных в другой список (столбцы). - person elig; 02.07.2018
comment
Для Python-3 используйте функцию диапазона вместо функции xrange - person Rakesh Chaudhari; 28.08.2018
comment
Я думаю, matrix = [[]] тогда нужно .append, чтобы действительно создать индекс. Потому что иначе matrix[0][0] = 1 еще не работает. - person bomben; 07.10.2020

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

Matrix = {}

Тогда вы сможете:

Matrix[1,2] = 15
print Matrix[1,2]

Это работает, потому что 1,2 - это кортеж, и вы используете его как ключ для индексации словаря. Результат похож на тупую разреженную матрицу.

Как указано osa и Josap Valls, вы также можете использовать Matrix = collections.defaultdict(lambda:0), чтобы отсутствующие элементы имели значение по умолчанию 0.

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

person enobayram    schedule 29.05.2014
comment
Затем вы также можете сделать import collections; Matrix = collections.defaultdict(float), чтобы заменить неинициализированные элементы нулями. - person Sergey Orshanskiy; 22.10.2015
comment
Не будет доступа к dict для кортежа (1,2), поскольку ключ имеет сложность наихудшего случая O (n). Как внутренне он будет хешировать кортежи. Принимая во внимание, что использование 2D-массива дало бы O (1) временную сложность для доступа к индексу [1,2] доступа. Поэтому использование dict для этого не должно быть хорошим выбором. - person Vatsal; 16.11.2015
comment
@Vatsal wiki.python.org/moin/TimeComplexity говорит, что средний случай - O (1 ), но насчет худшего случая вы правы. В любом случае, если вы не говорите о МНОГОЕ ПРЕДМЕТОВ, вам не будет дела до этой разницы. На самом деле, я бы больше беспокоился о памяти, чем о времени доступа. - person enobayram; 16.11.2015
comment
Также мы всегда стараемся избегать использования dicts до тех пор, пока общая сложность алгоритма не станет равной или большей, чем O (n ^ 2). Поскольку 'n' раз O (n) обращений даст сложность O (n ^ 2). - person Vatsal; 16.11.2015
comment
@enobayram, извините, но я не согласен. Асимптотический анализ всегда дает O (n ^ 2), если в худшем случае доступ O (n) выполняется n раз. Амортизированный анализ может дать меньшую оценку. И есть огромная разница между амортизированным и средним случаем ... пожалуйста, обратитесь, прежде чем делать какие-либо предположения и расплывчатые комментарии - person Vatsal; 17.11.2015
comment
Я широко использую этот вариант для разреженных матриц. Возможность Matrix = collections.defaultdict(lambda:0) очень полезна, скажем, при увеличении элементов в матрице. - person Josep Valls; 16.12.2015
comment
@JosepValls спасибо, я отредактировал ответ, чтобы включить ваше предложение. - person enobayram; 17.12.2015
comment
@Vatsal это не O (n), а O (k), где k - размер кортежа, и поскольку в этом случае он фиксирован, он эквивалентен O (1). - person Autodidact; 18.07.2019

В Python вы будете создавать список списков. Размеры не нужно объявлять заранее, но можно. Например:

matrix = []
matrix.append([])
matrix.append([])
matrix[0].append(2)
matrix[1].append(3)

Теперь матрица [0] [0] == 2 и матрица [1] [0] == 3. Вы также можете использовать синтаксис понимания списка. В этом примере он используется дважды для построения «двумерного списка»:

from itertools import count, takewhile
matrix = [[i for i in takewhile(lambda j: j < (k+1) * 10, count(k*10))] for k in range(10)]
person wberry    schedule 12.07.2011
comment
extend также будет полезен в первом случае: если вы начнете с m = [[]], вы можете добавить во внутренний список (расширить строку) с помощью m[0].extend([1,2]) и добавить во внешний список (добавить новую строку) с помощью m.append([3,4]), эти операции будут оставлю вас с [[1, 2], [3, 4]]. - person askewchan; 09.10.2013

Вы должны составить список списков, и лучше всего использовать вложенные понимания:

>>> matrix = [[0 for i in range(5)] for j in range(5)]
>>> pprint.pprint(matrix)
[[0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0]]

В вашем [5][5] примере вы создаете список с целым числом «5» внутри и пытаетесь получить доступ к его 5-му элементу, что, естественно, вызывает IndexError, потому что 5-го элемента нет:

>>> l = [5]
>>> l[5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
person utdemir    schedule 12.07.2011
comment
Фактически последовательность для row_index ('i') и column_index ('j') следующая: '››› матрица = [[0 для column_index в диапазоне (5)] для row_index в диапазоне (5)] » - person Aniruddha Kalburgi; 30.09.2018

rows = int(input())
cols = int(input())

matrix = []
for i in range(rows):
  row = []
  for j in range(cols):
    row.append(0)
  matrix.append(row)

print(matrix)

Почему такой длинный код, это тоже в Python, спросите вы?

Давным-давно, когда мне было неудобно с Python, я увидел однострочные ответы для написания 2D-матрицы и сказал себе, что больше не собираюсь использовать 2D-матрицу в Python. (Эти отдельные строки были довольно пугающими, и они не давали мне никакой информации о том, что делал Python. Также обратите внимание, что я не знаю об этих сокращениях.)

В любом случае, вот код для новичка, который имеет опыт работы с C, CPP и Java.

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

person unknownerror    schedule 06.07.2018

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

l =  [[] for _ in range(3)]

приводит к

[[], [], []]
person Fabian    schedule 04.12.2015

Вот как я обычно создаю 2D-массивы в Python.

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

Я считаю, что этот синтаксис легче запомнить по сравнению с использованием двух циклов for в понимании списка.

person Michael    schedule 03.06.2018

Использовать:

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

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

person innov8    schedule 05.08.2015
comment
Я бы, наверное, написал это как matrix = [[0]*cols for _ in range(rows)] - person Shital Shah; 20.02.2019

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

# 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)
person Manohar Reddy Poreddy    schedule 02.07.2016

Чтобы объявить матрицу нулей (единиц):

numpy.zeros((x, y))

e.g.

>>> numpy.zeros((3, 5))
    array([[ 0.,  0.,  0.,  0.,  0.],
   [ 0.,  0.,  0.,  0.,  0.],
   [ 0.,  0.,  0.,  0.,  0.]])

или numpy.ones ((x, y)), например.

>>> np.ones((3, 5))
array([[ 1.,  1.,  1.,  1.,  1.],
   [ 1.,  1.,  1.,  1.,  1.],
   [ 1.,  1.,  1.,  1.,  1.]])

Возможны даже три измерения. (http://www.astro.ufl.edu/~warner/prog/python.html см. -> Многомерные массивы)

person khaz    schedule 07.12.2013

Я использую свой первый скрипт 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
person user110954    schedule 28.03.2014

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

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

А потом добавьте такие данные:

mm = np.append(mm, [[1,2]], axis=1)
person Namrata Tolani    schedule 15.09.2017
comment
каковы будут плюсы и минусы использования numpy, а не понимания списка? - person Revolucion for Monica; 20.03.2018

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

Matrix = [[], []]

Теперь предположим, что вы хотите добавить 1 к Matrix[0][0], затем введите:

Matrix[0].append(1)

Теперь введите Matrix и нажмите Enter. Результатом будет:

[[1], []]

Если вместо этого вы ввели следующий оператор

Matrix[1].append(1)

тогда Матрица будет

[[], [1]]
person Meraj al Maksud    schedule 03.08.2019

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

matrix = {}

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

matrix[0,0] = value

or

matrix = { (0,0)  : value }

Результат:

   [ value,  value,  value,  value,  value],
   [ value,  value,  value,  value,  value],
   ...
person Mohammad Mahdi KouchakYazdi    schedule 16.01.2017

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

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

Список «данные» тогда представляет собой список списков с индексными данными [строка] [столбец]

person wsanders    schedule 04.09.2013

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

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

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

person alessadnro    schedule 14.07.2016
comment
numpy.matrix эквивалентны numpy.zeros без нулей без списка? - person Revolucion for Monica; 20.03.2018

Использовать:

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.

person pterodragon    schedule 01.11.2015
comment
Мне нравится эта попытка сделать что-то простое с ванильным Python без использования numpy. - person Rick Henderson; 07.06.2016

# Creates a list containing 5 lists initialized to 0
Matrix = [[0]*5]*5

Будьте осторожны с этим коротким выражением, см. Полное объяснение в ответе @ F.J.

person 和風信使    schedule 08.02.2014
comment
Будьте осторожны, потому что Matrix[0], Matrix[1], ..., Matrix[4] все указывают на один и тот же массив, поэтому после Matrix[0][0] = 3 вы ожидаете Matrix[0][0] == Matrix[1][0] == ... == Matrix[4][0] == 3. - person gongzhitaao; 03.04.2014
comment
Спасибо gongzhitaao за ваш комментарий. Если бы я прочитал это раньше, это сэкономило бы мне по крайней мере полчаса .. Наличие матрицы, в которой каждая строка указывает на одно и то же место в памяти, не кажется очень полезным, и если вы не знаете, что делаете это даже опасно! Я почти уверен, что это НЕ то, что хочет сделать Масуд Абасян, задавший вопрос. - person Adrian; 20.11.2014
comment
Вы должны удалить этот ответ, так как это неправильный ответ. Новички могут запутаться. - person cxxl; 25.11.2016
comment
Какой ответ вы имеете в виду? Я не вижу пользователя с именем F.J (даже в удаленных ответах). - person Peter Mortensen; 12.11.2017
comment
@PeterMortensen Я думаю, что он уже удален. Лучше посмотрите ответ (выше, Эндрю Кларк) по адресу: stackoverflow.com/a/6667529/3693431. - person jiten; 29.12.2020

используя список:

matrix_in_python  = [['Roy',80,75,85,90,95],['John',75,80,75,85,100],['Dave',80,80,80,90,95]]

используя dict: вы также можете сохранить эту информацию в хеш-таблице для быстрого поиска, например

matrix = { '1':[0,0] , '2':[0,1],'3':[0,2],'4' : [1,0],'5':[1,1],'6':[1,2],'7':[2,0],'8':[2,1],'9':[2,2]};

матрица ['1'] даст результат за время O (1)

* nb: вам нужно иметь дело с конфликтом в хеш-таблице

person Saurabh Chandra Patel    schedule 05.02.2018

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

list 1: To store rows
list 2: Actual two-dimensional matrix

Сохраните всю строку в первом списке. После этого добавьте список 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]]
person Nagendra Nigade    schedule 05.08.2017

l=[[0]*(L) for _ in range(W)]

Будет быстрее, чем:

l = [[0 for x in range(L)] for y in range(W)] 
person Harsh Sharma    schedule 18.11.2018
comment
Повторяющийся ответ того, кто уже ответил ниже. Также [[0]*(L) for i in range(W)] должно быть [[0]*(L) for _ in range(W)], поскольку i нигде не используется - person Ayush Vatsyayan; 08.01.2019

Вот фрагмент кода для создания матрицы на Python:

# get the input rows and cols
rows = int(input("rows : "))
cols = int(input("Cols : "))

# initialize the list
l=[[0]*cols for i in range(rows)]

# fill some random values in it
for i in range(0,rows):
    for j in range(0,cols):
        l[i][j] = i+j

# print the list
for i in range(0,rows):
    print()
    for j in range(0,cols):
        print(l[i][j],end=" ")

Пожалуйста, предложите, если я что-то пропустил.

person Chandra Shekhar    schedule 09.12.2019

Попробуй это:

rows = int(input('Enter rows\n'))
my_list = []
for i in range(rows):
    my_list.append(list(map(int, input().split())))
person Ankit Sharma    schedule 28.12.2018

В случае, если вам нужна матрица с предопределенными числами, вы можете использовать следующий код:

def matrix(rows, cols, start=0):
    return [[c + start + r * cols for c in range(cols)] for r in range(rows)]


assert matrix(2, 3, 1) == [[1, 2, 3], [4, 5, 6]]
person Vlad Bezden    schedule 21.01.2019

Пользовательская функция для ввода матрицы и печати

def inmatrix(m,n):
    #Start function and pass row and column as parameter
    a=[] #create a blank matrix
    for i in range(m): #Row input
        b=[]#blank list
        for j in range(n): # column input
            elm=int(input("Enter number in Pocket ["+str(i)+"]["+str(j)+"] ")) #Show Row And column  number 
            b.append(elm) #add value to b list
        a.append(b)# Add list to matrix
    return  a #return Matrix 

def Matrix(a): #function for print Matrix
    for i in range(len(a)): #row
        for j in range(len(a[0])): #column
            print(a[i][j],end=" ") #print value with space
        print()#print a line After a row print

m=int(input("Enter number of row")) #input row
n=int(input("Enter number of column"))
a=inmatrix(m,n) #call input matrix function 

print("Matrix is ... ")

Matrix(a) #print matrix function
person Sanjay Rai    schedule 24.05.2021