python - numpy.ndarray' 对象没有属性 'append' - 使用 numpy 创建堆栈时出现错误
问题描述
我想使用 numpy 创建一个堆栈
我尝试了以下代码,但是“numpy.ndarray”对象没有属性“附加””这个错误来了我尝试用其他属性替换附加,但是这些方法中的任何一个都对我不起作用。有人可以在您的电脑中运行代码并建议我解决此问题的方法。
Traceback (most recent call last):
File "C:\Users\Banchi\Desktop\numpy\main.py", line 3, in <module>
myStack.push(11)
File "C:\Users\Banchi\Desktop\numpy\stackf.py", line 8, in push
return self.Stack.append(data)
AttributeError: 'numpy.ndarray' object has no attribute 'append'
stackf.py
import numpy as np
class Stack:
def __init__(self):
self.Stack =np.array([])
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)
主文件
from stackf import Stack
myStack = Stack()
myStack.push(11)
myStack.push(11)
myStack.push(11)
myStack.push(11)
print(myStack.size())
myStack.push(10)
myStack.push(20)
myStack.push(30)
print(myStack)
解决方案
您可以定义您的类,例如:
class Stack:
def __init__(self, limit : int = 0):
self.arr = np.array([])
self.limit = limit
def is_empty(self) -> bool:
return self.size() == 0
def pop(self):
n = self.size() - 1
if n < 0:
raise Exception('pop - Stack is empty')
rv = self.arr[n]
self.arr = np.delete(self.arr, n)
return rv
def push(self, data):
if self.limit > 0 and self.limit == self.size():
raise Exception('push - Limit exceeded')
self.arr = np.append(self.arr, data)
def size(self) -> int:
return self.arr.size
def top(self):
if self.size() == 0:
raise Exception('top - stack underflow')
return self.arr[-1]
def __str__(self):
return np.array_str(self.arr)
请注意,我添加了一些有关limit的功能,但limit的默认值为0,表示“无限制”。
由于该类包含size()
方法,因此无需在__len()
方法中重复相同的代码。
我还添加了一些异常,而不是打印错误消息。
__str__
当您打印Stack实例时
,添加方法以获得任何有意义的结果。
然后,如果你运行你的主代码,结果是:
4
[11. 11. 11. 11. 10. 20. 30.]
但是,如果您创建您的Stack实例,例如myStack = Stack(3)
(将限制设置为非零值),那么在某些时候您将获得Exception: push - Limit exceeded。
推荐阅读
- spring - spring restservice 异步日志记录功能
- javascript - 如何通过类名获取“this.parent”元素值?
- linux - 如何从文件夹中的脚本文件中运行 100 个 csv 文件(一次一个文件)?
- java-time - Java 11 上的 DateTimeParseException 但适用于 Java 10
- regex - 使用 sed (//, /**, **/, #) 忽略 C 注释并包含语句
- regex - 使用 python regex 替换文件中的参数值
- sql - Does the server execution plan use the index
- vue.js - 带有点击监听器的无渲染 Vue 组件
- python - json.load 更改输入的字符串
- c# - C# Suspending Thread until Server responds