手机版 | 登陆 | 注册 | 留言 | 设首页 | 加收藏
当前位置: 网站首页 > python教程 > 文章 当前位置: python教程 > 文章

云计算开发python实例对象调用类方法python实例化对象参数理解

时间:2022-07-25    点击: 次    来源:网络    作者:佚名 - 小 + 大

云计算开发python实例对象调用类方法python实例化对象参数理解


下载地址

https://share.weiyun.com/OvviwGnZ


资料目录
Python练习集100题
100道Python面试题
Python100经典练习题
Python经典题目100道题
Python题库(已收录100道真题)
Python100例视频讲解课程
菜鸟教程Python教程100例
130道python练习题,涵盖基础内容的方方面面
Python考试题复习知识点试卷试题
PYTHON测试题和答案
python第一阶段考试题
Python经典面试题和答案解析
python期末考试复习试卷
python习题集大全(附答案解析)
老男孩Python全栈7期练习题(面试真题模拟)
尚观python第一阶段考试(面试真题模拟)
《Python程序设计基础与应用》习题答案
《Python快速编程入门》——课后题答案
Python编程基础张健 , 张良均课后习题及答案
Python程序设计基础及实践(慕课版)郭炜习题答案
Python程序设计基础习题答案与分析
python基础试题(含答案)

举例

旋转数组
题目要求
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数,要求使用空间复杂度为 O(1) 的原地算法
输入: [1,2,3,4,5,6,7] 和 k = 3
输出: [5,6,7,1,2,3,4]
思路分析
思路1,多次移动
如果没有空间复杂度为O(1)的要求,这个题目非常简单,简单的做一下切片处理就可以了
lst = [1, 2, 3, 4, 5, 6, 7]
lst = lst[len(lst)-3:] + lst[0:len(lst)-3]
print(lst)
但切片的过程就是一个复制的过程,我们使用了O(n)的空间,与题目要求不符。
我们只能使用一个O(1)的空间来临时存储数据,简单说,一次只能存储一个数字,但要向右移动K个位置。如果我们能找到一种算法,这个算法执行一次,只将数组向右移动1位,移动k个位置只需要执行这个算法K次就可以了。
考虑移动1位就简单了,用一个临时变量tmp将lst[-1]保存下来,然后从后向前,逐个向后移动,最后,将lst[0]赋值为tmp
tmp = lst[-1]
for i in range(len(lst)-1, 0, -1):
    lst[i] = lst[i-1]
lst[0] = tmp
经过上面的算法,数组就从[1,2,3,4,5,6,7]变成了[7,1,2,3,4,5,6],如果希望将数组向右移动K个位置,只需要执行K次就可了
def move_ele_1(lst, k):
    for j in range(k):
        tmp = lst[-1]
        for i in range(len(lst)-1, 0, -1):
            lst[i] = lst[i-1]
        lst[0] = tmp

if __name__ == '__main__':
    lst = [1, 2, 3, 4, 5, 6, 7]
    move_ele_1(lst, 3)
    print(lst)
思路2, 原地翻转
将数组分为两个区域,第一个区域是从0到len(lst)-k-1, 余下的是第二个区域,两个区域分别做一次翻转,然后将整个数组做一次翻转,算法的过程如下
[1, 2, 3, 4, 5, 6, 7]   原始数据
[4, 3, 2, 1, 5, 6, 7]   第一个区域翻转
[4, 3, 2, 1, 7, 6, 5]   第二个区域翻转
[5, 6, 7, 1, 2, 3, 4]   整体翻转
一旦有了思路,算法就很容易写出来,但要注意处理边界条件
def reverse_lst(lst, start, end):
    for i in range(0, (end-start)//2 + 1):
        tmp = lst[start+i]
        lst[start+i] = lst[end-i]
        lst[end-i] = tmp


def move_ele_2(lst, k):
    split_index = len(lst) - k - 1
    reverse_lst(lst, 0, split_index)
    print(lst)
    reverse_lst(lst, split_index+1, len(lst)-1)
    print(lst)
    reverse_lst(lst, 0, len(lst)-1)
    
if __name__ == '__main__':
    lst = [1, 2, 3, 4, 5, 6, 7]
    move_ele_2(lst, 3)
    print(lst)

上一篇:python实例化一个对象一个链表python实例对象是什么意思

下一篇:没有了

推荐阅读
声明 | 联系我们 | 关于我们
备案ICP编号  |   QQ:2151239526  |  地址:北京市东城区  |  电话:16605168200  |