Более элегантный способ создания 2D-матрицы в Python

Возможный дубликат:
Как инициализировать двумерный массив в Python?

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

for x in range(8): a.append([]) for y in range(8): a[x].append(0) 

Тем не менее, я хотел бы знать, есть ли способ украсить этот кусок кода. Я имею в виду, как вы создаете двумерную матрицу в python и заполняете ее 0?

4 Solutions collect form web for “Более элегантный способ создания 2D-матрицы в Python”

Использование вложенных списков :

 a = [[0 for y in range(8)] for x in range(8)] 

которая эквивалентна

 a = [] for x in range(8): row = [] for y in range(8): row.append(0) a.append(row) 

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

 a = [[0]*8 for _ in xrange(8)] 

Он использует списки и тот факт, что оператор * может применяться к спискам для заполнения их n экземплярами данного элемента.

Или еще лучше, напишите общую функцию для возвращаемых матриц заданного размера:

 # m: number of rows, n: number of columns def create_matrix(m, n): return [[0]*n for _ in xrange(m)] a = create_matrix(8, 8) 

Понимание списка более кратким.

 a = [[0 for i in xrange(8)] for i in xrange(8)] print a 

Или вы можете использовать массивы numpy, если вы будете выполнять численные вычисления с помощью массива. Функция Numpy.zeros создает многомерный массив нулей.

 import numpy as np a = np.zeros((8,8)) 

Вы можете использовать списки . Так как вам действительно не нужны значения, заданные range , вы можете использовать _ , что обычно означает значение, которое не интересует.

 >>> z = [[0 for _ in range(8)] for _ in range(8)] >>> import pprint >>> pprint.pprint(z) [[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, 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, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]] 

Перечисление списков обеспечивает краткий способ создания списков, не прибегая к использованию карт (), filter () и / или лямбда. Результирующее определение списка часто бывает более четким, чем списки, построенные с использованием этих конструкций.

  • В чем разница между функциями range и xrange в Python 2.X?
  • Переменные на основе ввода
  • Линии чтения Python в вложенных циклах из двух файлов
  • Как переписать рекурсивную функцию для использования цикла?
  • Использовать итератор как имя переменной в цикле питона
  • Запись и чтение словаря в определенном формате (Python)
  • Почему только одно предупреждение в цикле?
  • Поиск второго наименьшего числа с использованием циклов в python
  • Python - лучший язык программирования в мире.