python 小知识-大合集

  1. 无论采用哪种方法,self 所表示的都是实际调用该方法的对象。

  1. 无论是类属性还是类方法,都无法像普通变量或者函数那样,在类的外部直接使用它们。我们可以将类看做一个独立的空间,则类属性其实就是在类体中定义的变量,类方法是在类体中定义的函数。在类体中,根据变量定义的位置不同,以及定义的方式不同,类属性又可细分为以下 3 种类型:

类体中、所有函数之外:此范围定义的变量,称为类属性或类变量;

类体中,所有函数内部:以“self.变量名”的方式定义的变量,称为实例属性或实例变量;

类体中,所有函数内部:以“变量名=变量值”的方式定义的变量,称为局部变量。

  1. 双指针与滑动窗口:双指针算法基本原理和实践 - huansky - 博客园 (cnblogs.com)

  1. Python的list类型实现使用数组(数组容量是固定的),因此使用append添加元素时,将重新分配空间并将所有信息复制到新空间。那么复杂度为什么是O(1)呢?

它是摊销O(1),而不是O(1)。假设列表保留大小为8个元素,当空间用完时它的大小加倍。你想推50个元素。前8个元素按O(1)。第九个触发重新分配和8个副本,然后是O(1)推送.O(1)中的下一个7推。第17个触发重新分配和16个副本,然后是O(1)推送。接下来的15次推进O(1)。第三十三个触发重新分配和32个副本,然后是O(1)推送。接下来的17次推进O(1)。因此,所有推动都具有O(1)复杂度,我们在O(1)处有56个副本,在O(n)处有3个重新分配,其中n = 8,16和32。注意这是一个几何级数并且渐近等于O(n),n =列表的最终大小。这意味着将n个对象推送到列表上的整个操作是O(n)。如果我们 分摊每个元素,它是O(n)/ n = O(1)。
如果您查看链接的文档中的脚注,您可以看到它们包含一个警告:这些业务依赖于"摊销最坏情况"的"摊销"部分。根据容器的历史,个别动作可能需要很长时间。使用 摊销分析,即使我们偶尔必须执行昂贵的操作,当您将它们视为序列时,我们也可以获得"平均"操作成本的下限,而不是单独使用。任何单独的操作都可能非常昂贵--O(n)或O(n ^ 2)或更大的东西 - 但由于我们知道这些操作很少,我们保证可以在一系列O(n)操作中完成准时。(摊销平均值和摊销的最坏情况之间存在差异.摊销的平均情况是序列的平均运行时间除以序列中的操作数。摊销的最坏情况是序列中最差的可能运行时间除以序列中的操作数)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雾影隐于世

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值