2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 22

Как в классе реализовать массив произвольной размерности?

19.09.2013, 12:11. Показов 1418. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Написал класс, который создает одно-дву-трех мерные массивы с возможностью вызова элемента массива по индексу а также его изменение. Размерность массива определяется количеством ненулевых атрибутов в конструкторе класса. Код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
class arraypy():
    def __init__(self,a=1,b=0,c=0): 
        self.a=a 
        self.b=b 
        self.c=c 
        self.output={}
        if (a!=0) and (b==0): 
            for i in range(a): 
                self.output[i]=0 
        elif (a!=0) and (b!=0) and (c==0): 
            for i in range(a): 
                for j in range(b): 
                    self.output[i,j]=0 
        else: 
            for i in range(a): 
                for j in range(b): 
                    for k in range(c): 
                        self.output[i,j,k]=0 
        
    def __setitem__(self,t,v):
        if (self.a!=0) and (self.b==0):
            i=t
            if i>=self.a:
                print('Error: wrong index!')
            else:
                self.output[i]=v
        elif (self.a!=0) and (self.b!=0) and (self.c==0):
            i,j=t
            if (i>=self.a) or (j>=self.b):
                print('Error: wrong index!')
            else:
                self.output[i,j]=v
        else:
            i,j,k=t
            if (i>=self.a) or (j>=self.b) or (k>=self.c):
                print('Error: wrong index!')
            else:
                self.output[i,j,k]=v
    def __getitem__(self,t):
        if (self.a!=0) and (self.b==0):
            i=t
            return self.output[i]
        elif (self.a!=0) and (self.b!=0) and (self.c==0):
            i,j=t
            return self.output[i,j]
        else:
            i,j,k=t
            return self.output[i,j,k]
Работает все абсолютно корректно, но вот какая вещь не устраивает: в моем классе размерность фиксирована(max=3), а как сделать такой конструктор, который бы принимал произвольное число атрибутов и соответственно создавал массив произвольной размерности и возможно ли такое реализовать вообще?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.09.2013, 12:11
Ответы с готовыми решениями:

Реализовать функцию вычисления скалярного произведения векторов произвольной размерности
Напишите подпрограмму вычисления скалярного произведения векторов произвольной размерности

Как в классе правильно объявить массив с константой в качестве размерности?
Приветствую всех! Написал следующий код: Unit1.h class WireBare_Open { const int METAL_MAX; const int SECTION_MAX; ...

Массив произвольной размерности и работа с ним
Доброго времени суток. Появилась интересная задача: создать функцию для создания массива, размерность которого укажут в ходе программы(то...

4
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
20.09.2013, 05:31
Python
1
2
3
4
5
6
7
>>> lst = [[[[0]]]]
>>> lst
[[[[0]]]]
>>> lst[0][0][0][0] = 1
>>> lst
[[[[1]]]]
>>>
Добавлено через 5 минут
Цитата Сообщение от Petrol1342 Посмотреть сообщение
произвольное число атрибутов
Python
1
2
3
4
5
6
7
8
9
>>> class A:
...     def __init__(self, *args):
...         for name, value in zip('abc', args):
...             setattr(self, name, value)
... 
>>> a = A(1, 2, 3)
>>> a.a, a.b, a.c
(1, 2, 3)
>>>
2
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 22
21.09.2013, 14:10  [ТС]
Python
1
2
3
4
5
6
7
8
9
>>> class A:
...     def __init__(self, *args):
...         for name, value in zip('abc', args):
...             setattr(self, name, value)
... 
>>> a = A(1, 2, 3)
>>> a.a, a.b, a.c
(1, 2, 3)
>>>
А можно пояснить код? Просто такую конструкцию первый раз вижу, не совсем понимаю как это работает
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
21.09.2013, 22:03
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>> print(zip.__doc__)
zip(iter1 [,iter2 [...]]) --> zip object
 
Return a zip object whose .__next__() method returns a tuple where
the i-th element comes from the i-th iterable argument.  The .__next__()
method continues until the shortest iterable in the argument sequence
is exhausted and then it raises StopIteration.
>>> 
>>> 
>>> print(setattr.__doc__)
setattr(object, name, value)
 
Set a named attribute on an object; setattr(x, 'y', v) is equivalent to
``x.y = v''.
>>>
Python
1
2
3
>>> list(zip('abc', 'def'))
[('a', 'd'), ('b', 'e'), ('c', 'f')]
>>>
Python
1
2
3
4
5
6
7
8
>>> class A:
...   pass
... 
>>> a = A()
>>> setattr(a, 'x', 1)
>>> a.x
1
>>>
1
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 22
22.09.2013, 08:45  [ТС]
Спасибо. Буду пробовать реализовывать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.09.2013, 08:45
Помогаю со студенческими работами здесь

Дан двумерный массив произвольной размерности
Попросили сделать, не очень шарю в VBA. Прошу помочь. Дан двумерный массив произвольной размерности. Найти одномерный массив элементы...

Реализовать двумерную матрицу произвольной размерности. Хранящую отдельные биты (так называемый bitmap) в виде битового
Реализовать двумерную матрицу произвольной размерности. Хранящую отдельные биты (так называемый bitmap) в виде битового вектора. Биты...

Работа с матрицами произвольной размерности. Создать функцию, которая для произвольной матрицы вычисляет
а) номер столбца, в котором расположен максимальный элемент б) сумму минимальных элементов в каждом столбце Спасибо.

Работа с матрицами произвольной размерности. Создать функцию, которая для произвольной матрицы вычисляет
a)количество столбцов, содержащих данный элемент b) и еще что бы что нибудь считала, не важно но на подобие такого оба задания по типу...

Работа с матрицами произвольной размерности. Создать функцию, которая для произвольной матрицы вычисляет:
а) максимальную сумму по столбцам б) количество минимальных элементов массива Распишите подробно, хочу наконец разобраться. Заранее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru