Знайти довжину 2D масиву Python


82

Як знайти, скільки рядків і стовпців у 2d-масиві?

Наприклад,

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

має відображатися як 3 рядки та 2 стовпці.


4
звучить так, ніби ви повинні використовувати масив numpy, а не список списків
wim

Відповіді:


158

Подобається це:

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

Припускаючи, що всі підсписки мають однакову довжину (тобто це не зубчастий масив).


5
Поки це не зубчастий масив, це ідеально.
Макото

йо, я хочу знайти суму всіх елементів у цьому 2D-масиві def sum1 (вхід): sum = 0 для рядка в діапазоні (len (вхід) -1): для col в діапазоні (len (вхід [0]) - 1 ): сума = сума + вхід [рядок] [col] повернути суму друк sum1 ([[1, 2], [3, 4], [5, 6]]) Відображається 4 замість 21 (1 + 2 + 3 + 4 + 5 + 6 = 21). Де моя помилка?
Роналдіньо вивчав кодування

1
Є більш просте рішення: сума (сума (х) для х на вході)
Оскар Лопес,

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

18

Крім того, правильним способом підрахунку загальної кількості товару буде:

sum(len(x) for x in input)

Чудово, це було саме те, що мені потрібно! У моєму випадку я можу порахувати всі елементи списку до 2-го ступеня: сума (len (x) if isinstance (x, list) else 1 for x in some_list)
Bjarne Magnussen

10

Припускаючи введення [рядок] [col],

    rows = len(input)
    cols = map(len, input)  #list of column lengths

1

Ви також можете використовувати np.size (a, 1), 1 ось вісь, і це дасть вам кількість стовпців


0

припускаючи input[row][col]

rows = len(input)
cols = len(list(zip(*input)))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.