python的基本结构_Python基本数据结构

class Stack:

def __init__(self):

self.items = []

def isEmpty(self):

return self.items == []

def push(self, item):

self.items.append(item)

def pop(self):

return self.items.pop()

def peek(self):

return self.items[len(self.items)-1]

def size(self):

return len(self.items)

队列

class Queue:

def __init__(self):

self.items = []

def isEmpty(self):

return self.items == []

def enqueue(self, item):

self.items.insert(0,item)

def dequeue(self):

return self.items.pop()

def size(self):

return len(self.items)

双端队列

class Deque:

def __init__(self):

self.items = []

def isEmpty(self):

return self.items == []

def addFront(self, item):

self.items.append(item)

def addRear(self, item):

self.items.insert(0,item)

def removeFront(self):

return self.items.pop()

def removeRear(self):

return self.items.pop(0)

def size(self):

return len(self.items)

括号匹配

def check(s):

lefts = ['(', '[', '{']

rights = [')', ']', '}']

stack = Stack()

for c in s:

if c in lefts:

stack.push(c)

else:

if stack.is_empty():

return False

c_pop = stack.pop()

if lefts.index(c_pop) != rights.index(c):

return False

if stack.is_empty:

return True

return False

进制转换

def divideBy2(decNumber):

reback = Stack()

while (decNumber > 0):

reback.push(decNumber % 2)

decNumber = decNumber // 2

binstr = ''

while not reback.is_empty():

binstr = binstr + str(reback.pop())

return binstr

def baseConverter(decNumber, base):

'''

将十进制数字转成任意进制数字

'''

digits = '0123456789ABCDEF'

reback = Stack()

while (decNumber > 0):

reback.push(decNumber % base)

decNumber = decNumber // base

basestr = ''

while not reback.is_empty():

basestr = basestr + digits[reback.pop()]

return basestr

两个栈实现队列

# coding:utf-8

from pythonds.basic.stack import Stack

class StacToQueue(object):

def __init__(self):

self.stack_one = Stack()

self.stack_two = Stack()

def enqueue(self, item):

self.stack_one.push(item)

def dequeue(self):

if self.stack_two.isEmpty():

while not self.stack_one.isEmpty():

self.stack_two.push(self.stack_one.pop())

return self.stack_two.pop()

def size(self):

return len(self.stack_one) + len(self.stack_two)

def isEmpty(self):

return self.size() == 0

class Dequeue(object):

def __init__(self):

self.items = []

def enqueueFront(self, item):

self.items.insert(0, item)

def dequeueRear(self):

return self.items.pop()

def enqueueRear(self, item):

self.items.append(item)

def dequeueFront(self):

return self.items.pop(0)

def size(self):

return len(self.items)

def isEMpty(self):

return self.items == []

if __name__ == '__main__':

queue = StacToQueue()

for x in range(5):

queue.enqueue(x)

for x in range(5):

print(queue.dequeue())

回文判断

def palchecker(string):

chardequeue = Dequeue()

for ch in string:

chardequeue.enqueueFront(ch)

while not chardequeue.isEMpty():

front = chardequeue.dequeueFront()

rear = chardequeue.dequeueRear()

if front != rear:

return False

return True

if __name__ == '__main__':

print(palchecker("123321"))

print(palchecker("124561"))

中缀表达式转前缀表达式或者后缀表达式

# coding:utf-8

from pythonds.basic.stack import Stack

def infixToPostfix(infixexpr):

# 记录优先级

prec = {}

prec["*"] = 3

prec["/"] = 3

prec["+"] = 2

prec["-"] = 2

prec["("] = 1

# 操作符栈

opStack = Stack()

# 后缀

postfixList = []

# 单词列表

tokenList = infixexpr.split(' ')

for token in tokenList:

if token.isdigit(): # 分词部分纯数字

postfixList.append(token)

elif token == '(':

opStack.push(token)

elif token == ')':

topToken = opStack.pop()

while topToken != '(':

postfixList.append(topToken)

topToken = opStack.pop()

else:

while (not opStack.isEmpty()) and (prec[opStack.peek()] >= prec[token]):

postfixList.append(opStack.pop())

opStack.push(token)

while not opStack.isEmpty():

postfixList.append(opStack.pop())

return "".join(postfixList)

def infixToPrefix(infixexpr):

# 记录优先级

prec = {}

prec["*"] = 3

prec["/"] = 3

prec["+"] = 2

prec["-"] = 2

prec["("] = 1

# 操作符栈

opStack = Stack()

# 后缀

prefixList = []

# 单词列表

tokenList = infixexpr.split(' ')

for token in tokenList:

if token.isdigit():

prefixList.insert(0, token)

elif token == '(':

opStack.push(token)

elif token == ')':

topToken = opStack.pop()

while topToken != '(':

prefixList.insert(0, topToken)

topToken = opStack.pop()

else:

while (not opStack.isEmpty()) and (prec[opStack.peek()] >= prec[token]):

prefixList.insert(0, opStack.pop())

opStack.push(token)

while not opStack.isEmpty():

prefixList.insert(0, opStack.pop())

return "".join(prefixList)

def caculatePostfix(postfixexp):

numbers = "0123456789"

tokenList = postfixexp.split(' ')

numStack = Stack()

for token in tokenList:

if token in numbers:

numStack.push(int(token))

else:

numb = numStack.pop()

numa = numStack.pop()

result = doMath(numa, numb, token)

numStack.push(result)

return numStack.pop()

def doMath(a, b, op):

if op == '+':

return a + b

elif op == '-':

return a - b

elif op == '*':

return a * b

elif op == '/':

return a / b

if __name__ == '__main__':

postList = infixToPostfix("1 + 3 * 5 / ( 6 - 4 )")

print(postList)

pretList = infixToPrefix("1 + 3 * 5 / ( 6 - 4 )")

print(pretList)

print(caculatePostfix(" ".join(postList)))#对于个位数字运算可以直接加空格,对于多位数字需要在转为后缀字符串时操作

1201240-20171001161325731-1345364491.png

1201240-20171001161430403-1223658688.png

1201240-20171001161413153-887654926.png

1201240-20171001161504622-614612475.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值