Как создать многомерный массив typedef в Python

#python #c #arrays #typedef

#python #c #массивы #typedef

Вопрос:

В C можно создать typedef для 1D, 2D массивов, а затем использовать их для объявления переменных.

 typedef char my2DDataArr[2][2];
typedef int my1DDataArr[10];

my2DDataArr arr2d_1= {{0,1},{2,3}};
my1DDataArr arr1d_1 = {1,2,3,4,5,6,7,8,9,10};
 

Как я могу выполнить подобное в Python?

Комментарии:

1. Вам вообще не нужно объявлять типы переменных в Python.

Ответ №1:

Python сильно, но динамически типизирован. Это означает, что вам не нужно сообщать компилятору, какого типа будет переменная — в основном потому, что код python не компилируется.

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

 my_list = [] # List that can contain other lists, could be 1D or nD        
initialized_list = [[1, 2], [2, 4]]
 

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

 import numpy as np
my_array = np.ndarray((2, 2)) # 2D Array
initialized_array = np.array([[1, 2], [2, 4]])
 

Теперь это обозначение должно выглядеть для вас более знакомым, поскольку это 2-мерный массив. В отличие от списка, он может и будет иметь только 2 измерения, всего 4 элемента (2×2). Если вы не заботитесь о неизменяемости массива и / или хотите изменчивости, вы можете просто использовать подсказки типа:

 from typing import List
my_list: List[List[int]]
my_list = []
 

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

Комментарии:

1. Вероятно, стоит отметить, что подсказки типа — это просто подсказки для IDE, а не принудительное исполнение интерпретатором

Ответ №2:

Эквивалент Python будет

 arr2d_1 = [[0,1],[2,3]]
arr1d_1 = [1,2,3,4,5,6,7,8,9,10]
 

Там нет typedef и нет необходимости указывать тип переменной. Самое большее, что вы могли бы сделать:

 arr2d_1:list = [[0,1],[2,3]]
arr1d_1:list = [1,2,3,4,5,6,7,8,9,10]
 

Но даже тогда :list часть называется подсказкой типа, которая поможет некоторым IDE в рефакторинге, это не является строгим требованием для интерпретатора.