python编程和计算_python高级编程和算法

importcopy#a = ("a","b","c")#a = ["a","b","c"]

a = {"a","b","c"}

b=a

c=copy.copy(a)

d=copy.deepcopy(a)#print(b)#print(c)#print(d)#print(id(b))#print(id(c))#print(id(d))

"""考点:

1.可变对象:列表和字典

2.不可变对象:一旦创建就不可修改的对象:元组,字符串,数字"""

class Person: #类对象

x = 5y= 6

def __init__(self,x,y):

self.x=x

self.y=yprint(self.x)print(self.y)defadd(self):return self.x +self.y#实例对象

p = Person(1,2)

p.z= 9 #实例变量#print(p.z)##p1 = Person(3,4)#print(Person.add(Person(3,4)))#print(p.add())#print("-------------------------")#print(p.z)#print(p.x) #实例变量#print(p.y) #实例变量#print("************************************")#print(Person.x) # 类变量#print(p.add())

"""考点:

1.类对象和实例对象

2.类变量和实例变量"""

#a *args **kwargs

def function(a,*args,**kwargs):print(type(a))print(type(args))print(type(kwargs))print(a)print(args)print(kwargs)#function(1,1,1)#function(6,7,8,9,b=2,c=3,d=4)

"""考点:

1.位置必须是一定的a,*args,**kwargs

2.类型分别是int,tuple,dict"""

importtimedefruntime(function):defget_now_time():print(time.time())

function()returnget_now_time

@runtimedefrun():print("run")defruntime1(function):def get_now_time(*args):print(time.time())

function(*args)returnget_now_time

@runtime1defrun1(i):print(i)#run()#run1(1)#print("___________________________________")

defruntime3(function):def get_now_time(**kwargs):print(time.time())

function(**kwargs)returnget_now_time

@runtime3def run3(**kwargs):print(kwargs)#run3(a="aaa")

defruntime4(function):def get_now_time(name,**kwargs):print(time.time())

function(name,**kwargs)returnget_now_time

@runtime4def run4(name,**kwargs):print("名字==",name)print(kwargs)#run4("jiyanjiao",a="haha")

"""考点:

1.装饰器写法

2.不带参数装饰器

3.带参数的装饰器"""

deffunc1():for i in range(1,5):returnideffunc2():for i in range(1,5):yieldi#print(func1())#print(func2())

#yi = func2()#for i in yi:#print(i)

#print("**************************")

re=func2()#for i in re:#print(i)

"""考点:

1.yield 与 return区别

2.yield:生成器类型"""

#题目:根据一个列表,创建一个新的列表,用一行代码#lambada表达式 推导式

list1= [1,2,3,4]

result= map(lambda x: x*x,list1)#print(list(result))#print("&&&&&&&&&&&&&&&&&&&&&&&&&&")#用推导式来解决,列表推导式

list2 = [i*i for i inlist1]#print(list2)

list3= [i*i for i in list1 if i>2]#print(list3)

#集合的推导式 打印结果无序,因为集合是无序的

list1 = {1,2,3,4}

list4= {i*i for i inlist1}#print(list4)

#字典的推导式

dict1 ={"key1":"value1","key2":"value2"}

keys= [key for key ,value indict1.items()]#print(keys)

key_value= {key:value for key,value indict1.items()}#print(key_value)

key_value_if= {key:value for key,value in dict1.items() if key=="key1"}#print(key_value_if)

"""考点:

1.推导式 [表达式,for循环,条件]"""

'''常见排序方式:

插入排序,希尔排序,直接排序,堆排序

冒泡排序,快速排序,归并排序,基数排序'''

#给定一个列表,将这个列表进行排序,要求:时间复杂度要小于o(n^2)

'''复杂度:

1.时间复杂度:指算法在计算的过程中所需要的计算工作量

2.空间复杂度:指算法在计算过程中所需要的内存空间

常见的时间复杂度:

常数阶O(1),对数阶O(log2n),线性阶O(n)

线性对数阶O(nlog2n),平方阶O(n^2),立方阶O(n^3)

随着问题的规模n,不断的增大,上述的时间复杂度就不断的增大,意味着算法的执行效率越低'''

#冒泡排序的实现#相邻的两个数字进行比较,大的向下沉,最后一个元素时最大的#时间复杂度O(n^2)

defbublle_sort(blist):

count=len(blist)for i inrange(0,count):for j in range(i+1,count):if blist[i] >blist[j]:

blist[i],blist[j]=blist[j],blist[i]returnblist

blist= [8,5,90,31,1]

s=bublle_sort(blist)#print(s)

"""快速排序:

思想:递归

列表中取出第一个元素作为标准,把比第一个元素小的都放在左侧,把比第一个元素大的都放在右侧

最小的在左边,最大的在右边,递归完成即排序结束

时间复杂度:O(nlog2n)"""

#使用递归+推导式写快速排序

defquick_sort(quick_list):if quick_list==[]:return[]else:

first=quick_list[0]

less= quick_sort([l for l in quick_list[1:] if l

more= quick_sort([m for m in quick_list[1:] if m >=first])return less + [first] +more

quick_list= [8,5,90,31,1]print(quick_sort(quick_list))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值