Python数组类+AI插件

目录

规划

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

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

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

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

实现

实现细节一点一点拆解

初始化

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

python 复制代码
class Array:
	 def __init__(self, capacity: int):
        self._n = capacity
        self._count = 0
        self._data = [0 for i in range(capacity)]

插入

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

python 复制代码
 def insert(self, index: int, value: int) -> bool:
        if self._count == self._n:
            print("没有可插入的位置")
            return False

        if index < 0 or index > self._count:
            print("位置不合法")
            return False

        for i in range(self._n, index, -1):
            self._data[i - 1] = self._data[i - 2]

        self._data[index] = value
        self._count += 1
        return 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 False

       for i in range(index, self._n, -1):
           self._data[i - 1] = self._data[i]

       self._count -= 1
       return 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 -1
        return 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个功能对我来说是最好用的,所以分享下,希望看到的人能喜欢。可以去官网链接下载体验下。

相关推荐
biter down3 小时前
从 0 到 1 搭建 Python 接口自动化测试框架(博客系统实战)
开发语言·python
肖永威4 小时前
Python多业务并行计算框架插件化演进:从硬编码到动态注册
python·插件化·并行计算·动态注册
yz_aiks4 小时前
Linux Jar包配置Systemd自启动实战:从排查到配置全流程
linux·python·jar·自启动·systemd
不知名的老吴4 小时前
线程的生命周期之线程“插队“
java·开发语言·python
xsc6996755 小时前
从零搭建大模型与智能体平台 - 完整技术详解
python
无风听海7 小时前
多租户系统中的 OIDC:Discovery 端点与联合登录的深度实践
后端·python·flask
CTA终结者7 小时前
期货量化主力换月程序怎么移仓:天勤 underlying_symbol 与任务切换
python·区块链
马士兵教育7 小时前
Java还有前景吗?Java+AI大模型学习路线及项目?
java·人工智能·python·学习·机器学习
KaMeidebaby8 小时前
卡梅德生物技术快报|纯化重组蛋白实操详解
人工智能·python·tcp/ip·算法·机器学习
Cloud_Shy6188 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 30 - 32)
开发语言·人工智能·笔记·python·学习方法