Найти длину 2D-массива Python

83

Как узнать, сколько строк и столбцов находится в 2-м массиве?

Например,

Input = ([[1, 2], [3, 4], [5, 6]])`

должны отображаться как 3 строки и 2 столбца.

Роналдиньо изучает кодирование
источник
4
звучит так, как будто вы должны использовать массив numpy, а не список списков
wim

Ответы:

159

Как это:

numrows = len(input)    # 3 rows in your example
numcols = len(input[0]) # 2 columns in your example

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

Оскар Лопес
источник
5
Это идеальный вариант, если это не зубчатый массив.
Макото
yo, я хочу найти сумму всех элементов в этом 2D-массиве def sum1 (input): sum = 0 для строки в диапазоне (len (input) -1): for col in range (len (input [0]) - 1 ): sum = sum + input [row] [col] return sum print sum1 ([[1, 2], [3, 4], [5, 6]]]) Отображает 4 вместо 21 (1 + 2 + 3 + 4 + 5 + 6 = 21). Где моя ошибка?
Роналдиньо изучает кодирование
1
Есть более простое решение: sum (sum (x) for x in input)
Оскар Лопес
1
@LongBodie: ошибка в том, что вы вычитаете 1 из длин, которых не следует. Range(n)уже дает 0,1, ..., n-1 .
Junuxx
39

Вы можете использовать numpy.shape.

import numpy as np
x = np.array([[1, 2],[3, 4],[5, 6]])

Результат:

>>> x
array([[1, 2],
       [3, 4],
       [5, 6]])
>>> np.shape(x)
(3, 2)

Первое значение в кортеже - число строк = 3; Второе значение в кортеже - количество столбцов = 2.

Акавалл
источник
2
Спасибо, я не хотел использовать numpy для этой штуки
urgeo 01
18

Кроме того, правильным способом подсчета общего количества предметов будет:

sum(len(x) for x in input)
Мэтт Нет
источник
Отлично, это именно то, что мне нужно! В моем случае я могу подсчитать все элементы списка до 2-й степени: sum (len (x) if isinstance (x, list) else 1 for x in some_list)
Магнуссен
10

Предполагая ввод [строка] [столбец],

    rows = len(input)
    cols = map(len, input)  #list of column lengths
Machow
источник
1

Вы также можете использовать np.size (a, 1), 1 вот ось, и это даст вам количество столбцов

Рия Дас
источник
0

предполагая input[row][col]

rows = len(input)
cols = len(list(zip(*input)))
MiaeKim
источник