Двумерный массив в питоне - PullRequest
38 голосов
/ 18 ноября 2011

Я хочу знать, как объявить двумерный массив в Python.

arr = [[]]

arr[0].append("aa1")
arr[0].append("aa2")
arr[1].append("bb1")
arr[1].append("bb2")
arr[1].append("bb3")

Первые два назначения работают нормально.Но когда я пытаюсь сделать, arr[1].append("bb1"), я получаю следующую ошибку:

IndexError: list index out of range.

Я делаю что-нибудь глупое, пытаясь объявить двумерный массив?

Edit: но я не знаю количество элементов в массиве (как строк, так и столбцов).

Ответы [ 10 ]

62 голосов
/ 18 ноября 2011

Вы не «объявляете» массивы или что-либо еще в python.Вы просто назначаете (новую) переменную.Если вам нужен многомерный массив, просто добавьте новый массив в качестве элемента массива.

arr = []
arr.append([])
arr[0].append('aa1')
arr[0].append('aa2')

или

arr = []
arr.append(['aa1', 'aa2'])
53 голосов
/ 18 ноября 2011

В Python нет многомерных массивов как таковых, у вас есть список, содержащий другие списки.

>>> arr = [[]]
>>> len(arr)
1

Что вы сделали, это объявили список, содержащий один список. Таким образом, arr[0] содержит список, но arr[1] не определено.

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

arr = [[],[]]

Или для определения более длинного списка, который вы можете использовать:

>>> arr = [[] for _ in range(5)]
>>> arr
[[], [], [], [], []]

Что вы не должны делать, это:

arr = [[]] * 3

Поскольку это помещает в один и тот же список во всех трех местах списка контейнеров:

>>> arr[0].append('test')
>>> arr
[['test'], ['test'], ['test']]
18 голосов
/ 18 ноября 2011

Здесь вы используете не массивы, а списки (списков).

Если вам нужны многомерные массивы в Python, вы можете использовать массивы Numpy.Вам нужно знать форму заранее.

Например:

 import numpy as np
 arr = np.empty((3, 2), dtype=object)
 arr[0, 1] = 'abc'
4 голосов
/ 18 ноября 2011

Вы пытаетесь добавить второй элемент в массив, но он не существует. Создайте это.

arr = [[]]

arr[0].append("aa1")
arr[0].append("aa2")
arr.append([])
arr[1].append("bb1")
arr[1].append("bb2")
arr[1].append("bb3")
2 голосов
/ 24 августа 2018

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

import numpy as np
a = [] # declare null array
a.append(['aa1']) # append elements
a.append(['aa2'])
a.append(['aa3'])
print(a)
a_np = np.asarray(a) # convert to numpy array
print(a_np)
2 голосов
/ 25 августа 2014

Мы можем динамически создать многомерный массив следующим образом:

Создайте 2 переменные для чтения x и y из стандартного ввода:

 print("Enter the value of x: ")
 x=int(input())

 print("Enter the value of y: ")
 y=int(input())

Создать массив списка с начальными значениями, заполненными 0 или чем-либо, используя следующий код

z=[[0 for row in range(0,x)] for col in range(0,y)]

создает количество строк и столбцов для данных массива.

Чтение данных со стандартного ввода:

for i in range(x):
         for j in range(y):
             z[i][j]=input()

Показать результат:

for i in range(x):
         for j in range(y):
             print(z[i][j],end=' ')
         print("\n")

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

for row in z:
     print(row)
2 голосов
/ 30 декабря 2012

При построении многомерных списков в Python я обычно использую что-то похожее на решение ThiefMaster, но вместо добавления элементов в индекс 0, добавления элементов в индекс 1 и т. Д. Я всегда использую индекс -1 который автоматически является индексом последнего элемента в массиве.

т.е.

arr = []

arr.append([])
arr[-1].append("aa1")
arr[-1].append("aa2")

arr.append([])
arr[-1].append("bb1")
arr[-1].append("bb2")
arr[-1].append("bb3")

создаст 2D-массив (на самом деле список списков), за которым вы ищите.

1 голос
/ 23 ноября 2012
a = [[] for index in range(1, n)]
0 голосов
/ 06 июля 2017

Для композитного программирования

1) Для ввода значения в 2D-массиве

row=input()
main_list=[]
for i in range(0,row):
    temp_list=map(int,raw_input().split(" "))
    main_list.append(temp_list)

2) Для отображения 2D-массива

for i in range(0,row):
    for j in range(0,len(main_list[0]):
        print main_list[i][j],
        print
0 голосов
/ 15 мая 2016
x=3#rows
y=3#columns
a=[]#create an empty list first
for i in range(x):
    a.append([0]*y)#And again append empty lists to original list
    for j in range(y):
         a[i][j]=input("Enter the value")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...