import copy #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 = 5 y = 6 def __init__(self,x,y): self.x = x self.y = y print(self.x) print(self.y) def add(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 """ import time def runtime(function): def get_now_time(): print(time.time()) function() return get_now_time @runtime def run(): print("run") def runtime1(function): def get_now_time(*args): print(time.time()) function(*args) return get_now_time @runtime1 def run1(i): print(i) #run() #run1(1) # print("___________________________________") def runtime3(function): def get_now_time(**kwargs): print(time.time()) function(**kwargs) return get_now_time @runtime3 def run3(**kwargs): print(kwargs) #run3(a="aaa") def runtime4(function): def get_now_time(name,**kwargs): print(time.time()) function(name,**kwargs) return get_now_time @runtime4 def run4(name,**kwargs): print("名字==",name) print(kwargs) #run4("jiyanjiao",a="haha") """ 考點: 1.裝飾器寫法 2.不帶參數裝飾器 3.帶參數的裝飾器 """ def func1(): for i in range(1,5): return i def func2(): for i in range(1,5): yield i # 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 in list1] #print(list2) list3 = [i*i for i in list1 if i>2] #print(list3) # 集合的推導式 打印結果無序,由於集合是無序的 list1 = {1,2,3,4} list4 = {i*i for i in list1} #print(list4) #字典的推導式 dict1 = { "key1":"value1", "key2":"value2" } keys = [key for key ,value in dict1.items()] #print(keys) key_value = {key:value for key,value in dict1.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) def bublle_sort(blist): count = len(blist) for i in range(0,count): for j in range(i+1,count): if blist[i] > blist[j]: blist[i],blist[j] = blist[j],blist[i] return blist blist = [8,5,90,31,1] s = bublle_sort(blist) #print(s) """ 快速排序: 思想:遞歸 列表中取出第一個元素做爲標準,把比第一個元素小的都放在左側,把比第一個元素大的都放在右側 最小的在左邊,最大的在右邊,遞歸完成即排序結束 時間複雜度:O(nlog2n) """ # 使用遞歸+推導式寫快速排序 def quick_sort(quick_list): if quick_list==[]: return [] else: first = quick_list[0] less = quick_sort([l for l in quick_list[1:] if l < first]) 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))