#python #arrays #numpy #stack
Вопрос:
Я хочу создать класс стека, используя массив numPy, но возникает эта ошибка
Ошибка типа: init() принимает 1 позиционный аргумент, но было дано 2
import numpy as np
class Stack:
def __init__(self):
self.Stack =np.Stack([])
def push(self,data):
return self.Stack.append(data)
print("stack overfolow")
def pop(self):
if len(self.Stack)==0:
print("stack underflow")
else:
return self.Stack.pop()
def __len(self):
return len(self.Stack)
def top(self):
if len(self.Stack)==0:
print("stack under flow")
else:
return self.Stack[len(self.Stack)-1]
def is_empty(self):
return len(self.Stack) == 0
def is_full(self):
return len(self.Stack) == self.limit
def size(self):
return len(self.Stack)
Комментарии:
1. По какой линии ? Не называйте свой класс так же, как атрибут
2.
np.Stack
не существует, значит ?3. Заставьте это работать со списками, прежде чем пытаться сделать это с numpy.
4. Сообщите о полной ошибке, а не только о приближении от руки.
5. Было бы полезно, если бы вы показали код, который вызывает/создает ваш объект, то есть полный код, который мы можем вырезать, вставить и запустить самостоятельно, и полную трассировку стека, как просил кто — то другой.
Ответ №1:
Заменить self.Stack =np.Stack([])
на self.stack = np.stack([0,0])
Причина в том, что у numpy есть стек методов, который складывает 2 массива друг на друга, и для этого требуется что-то сложить. Также, используя нижний регистр вместо верхнего, вы следуете рекомендациям pep8.
Даже если это сработает, я считаю , что вы хотите np.stack
заменить np.array
, причина в том, что вам не нужно ничего складывать прямо сейчас, и вам нужно только возвращаемое значение стека, которое само по себе является np.массивом