Python数组类+AI插件

devtools/2024/9/22 23:34:08/

目录

  • 规划
  • 实现
    • 初始化
    • 插入
    • 删除
    • 查找
  • AI插件
    • 单测
    • 注释
    • 调优建议
  • 小结

规划

先想清楚都写哪些,然后再动手操作

用Python写了一个简单数组类,首先思考下都写哪些功能:

  1. 插入
  2. 删除
  3. 查找
  4. 用插件做单元测试和写注释

目的只是实现一个简单的数组类,了解数组的基础功能,基本结构;重点是去分析插入,删除的时间复杂度。

实现

实现细节一点一点拆解

初始化

先写一个类,然后实现初始化的操作;代码如下:

python">class Array:def __init__(self, capacity: int):self._n = capacityself._count = 0self._data = [0 for i in range(capacity)]

插入

接着写插入的代码,如下:

python"> def insert(self, index: int, value: int) -> bool:if self._count == self._n:print("没有可插入的位置")return Falseif index < 0 or index > self._count:print("位置不合法")return Falsefor i in range(self._n, index, -1):self._data[i - 1] = self._data[i - 2]self._data[index] = valueself._count += 1return True

以上是插入的代码,只是一个简单的插入操作。接下来看下这个操作的效率,最好的情况是index值跟n值差1,最坏的情况O(n),平均是O(n),所以这个插入的时间复杂度也为O(1)

删除

接下来看下删除的代码,如下:

python">  def delete(self, index: int) -> bool:if index < 0 or index >= self._count:return Falsefor i in range(index, self._n, -1):self._data[i - 1] = self._data[i]self._count -= 1return True

分析完插入,删除就容易理解了。看下操作数据的效率,最好情况是O(1),即删除末尾元素;最坏的情况是O(n),需要遍历n个元素;平均是O(n)。删除的操作时间复杂度O(n)。

查找

直接上代码,如下:

python">    def find(self, index: int) -> int:if index < 0 or index >= self._count:return -1return self._data[index]

这个就很直接了。效率很高,因为数组支持随机访问。

AI插件

这个插件是Baidu Comate智能代码助手。我用的pycharm,可以去File->Settings->plugins,搜索Baidu Comate即可找到。如下图:
在这里插入图片描述

关闭后的位置,如下图:
在这里插入图片描述
点开如下,
在这里插入图片描述
有2个功能,单测,注释。我主要用了这2个。

单测

选中一个函数,我这选的是insert,然后点击
在这里插入图片描述
,右边就生成了单测,如下图:
在这里插入图片描述
在这里插入图片描述
这个功能效果挺好的,值得推荐下。

注释

接下来使用下注释功能,
在这里插入图片描述
点击这个,然后右边就有了注释的内容,如下图:
在这里插入图片描述
点击,我觉得写的挺好的,然后点击采纳;出现了如下图:
在这里插入图片描述
注释就写完了。

调优建议

这个功能怎么说呢?我也是体验了一下,才发现的。其实,这个功能的设计应该是挺好的,我这测试了下我的代码,还好。展示下怎么使用。在编辑器中选中一段代码,如下图:
在这里插入图片描述
然后,在右下角输入框输入"/调优建议",如下图:
在这里插入图片描述
给大家看下我的代码的分析结果。如下图:
在这里插入图片描述
代码问题写了一大堆,看下它给出的代码,如下图:
在这里插入图片描述
看下,好像跟我写的还是一样的。嘿嘿嘿

小结

数组的逻辑+单元测试+注释
挺好的一个内容。先说下数组吧,其实,数组类主要的就是插入和删除操作,这2个时间复杂度都是O(n)的,这个很重要;查找的话,就是根据下标去查找数组的值,这个就是O(1)的时间复杂度。无论是std::vector,还是UE的TArray,或者是其他的实现,时间复杂度都一样的。然后分享下这个插件的使用,其实插件的功能远不止于此,只是我觉得这2个功能对我来说是最好用的,所以分享下,希望看到的人能喜欢。可以去官网链接下载体验下。


http://www.ppmy.cn/devtools/25367.html

相关文章

npm——基本使用

npm全称为Node Package Manager&#xff0c;是Node.js的包管理工具&#xff0c;它允许开发者轻松地安装、更新、卸载以及管理项目依赖的各种JavaScript库和工具。 基本使用方法 安装Node.js和npm 访问Node.js官网&#xff08;https://nodejs.org/&#xff09;下载适合您操作系…

Python | Leetcode Python题解之第57题插入区间

题目&#xff1a; 题解&#xff1a; class Solution:def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:left, right newIntervalplaced Falseans list()for li, ri in intervals:if li > right:# 在插入区间的右侧且无交集…

ChatGPT实战100例 - (18) 用事件风暴玩转DDD

文章目录 ChatGPT实战100例 - (18) 用事件风暴玩转DDD一、标准流程二、定义目标和范围三、准备工具和环境四、列举业务事件五、 组织和排序事件六、确定聚合并引入命令七、明确界限上下文八、识别领域事件和领域服务九、验证和修正模型十、生成并验证软件设计十一、总结 ChatGP…

OpenHarmony硬件合成方案解析

本文档主要讲解在OpenHarmony中&#xff0c;硬件合成适配的方法及原理说明。 环境说明&#xff1a; OHOS版本&#xff1a;3.1-Release及以上 一、背景介绍 1.1 什么是合成 要理解什么是合成&#xff0c;合成做了什么&#xff1f;我们先通过分解设置界面来回答这个问题: 在…

【工作实践-11】关于uniapp切换账号登录失败问题

遇到问题&#xff1a;在使用uniapp写的程序中&#xff0c;第一次打开程序登录(账号密码正确)&#xff0c;调用登录接口&#xff0c;没有任何问题&#xff0c;正常登录&#xff1b;退出登陆后&#xff0c;输入不同的账号密码(账号密码均正确)&#xff0c;调用登录接口提示登陆失…

K8s初次入门

初步:搭建k8s集群 k8s 集群主机清单 主机名ip地址master1.50node-00011.51node-00021.52node-00031.53node-00041.54node-00051.55harbor1.30事先准备 所有的k8s集群主机卸载防火墙和禁用swap交换空间(docker、k8s建议禁用swap) 安装工具 dnf install -y kubeadm kubelet ku…

【Docker学习】docker stop深入研究

本想将stop、start、restart、kill、pause、unpause这几个命令一起打包学习&#xff0c;但使用stop的过程中发现了一些可深入探讨的课题&#xff0c;因此这次只说docker stop。 命令&#xff1a; docker container stop 描述&#xff1a; 停止一个或多个运行中的容器。容器内的…

Linux已安装virtualenv 但还是报 bash: virtualenv: command not found 错误原因及解决

场景 在 linux 上已经安装了python和 virtualenv &#xff0c;但是直接执行 virtualenv 相关的指令创建虚拟环境还是失败并且报错 bash: virtualenv: command not found 原因 虽然手动安装了virtualenv 没有自动配置 virtualenv 的软连接 解决方式 手动在安装目录下去执行…