1. 程式人生 > >正則、冒泡排序、多級排序、FIFO

正則、冒泡排序、多級排序、FIFO

() tin port capacity 運行 key 冒泡排序 匹配 err

1、刪除各行行尾的alex,alex不區分大小寫: import re s=‘‘‘aLex123 ja654alEx rain7Alex8 90helloaLeX‘‘‘ #re.M使得^和$由文首、文末變為各行的行首、行末;re.I不區分規則參數的大小寫;re.S使.能匹配\n m=re.sub(‘alex$‘,‘‘,s,count=0,flags=re.M+re.I) print(m) **********************分割線********************** 給json的每個key,添加個前綴ids_: import re s=‘{"name":"jerry","age":32}‘ #同EditPlus的替換框,group(0)為整個查找內容,group(1)才為其內第1對()中的內容 s=re.sub(‘"(\w+?":)‘,lambda x:‘"ids_‘+x.group(1),s) print(s) ****************************************分割線****************************************
冒泡排序: t=[87, 69, 42, 25, 10] for y in range(1,len(t)): #取出第y大;最末大無需排序 # 每輪內循環的結果是讓最大的去了末尾,故下輪比較不需加它 for x in range(len(t)-y): if t[x]>t[x+1]: tmp=t[x] t[x]=t[x+1] t[x+1]=tmp print(t) ****************************************分割線****************************************
二級排序:先以score排序,score相同的以name排序: class Student: def __init__(self,name,score): self.name=name self.score=score def __str__(self): return ‘(%s:%d]‘ %(self.name,self.score) L=[Student(‘Tim‘,99),Student(‘Bob‘,88),Student(‘Alice‘,99)] L=sorted(L,key=lambda x:[x.score,x.name]) print([x.__str__() for x in L]) ****************************************分割線****************************************
FirstInFirstOut的有序字典: from collections import OrderedDict class FIFO(OrderedDict): def __init__(self, capacity=3,*args,**kwargs): self.capacity = capacity #寫到super()下面,就報錯無capacity屬性 super(FIFO,self).__init__(*args,**kwargs) #OrderedDict.__init__(self,*args,**kwargs) def __setitem__(self, key, value): if key in self: print(‘delete existed key:‘,(key,self[key])) del self[key] elif len(self)==self.capacity: #表面是批量添加key,實則逐一添加,用>=就畫蛇添足了 front=self.popitem(last=False) print(‘delete front key:‘,front) # 如同上文的構造函數,要用到父類的同名函數時,須等到結尾,才來顯式調用它 OrderedDict.__setitem__(self, key, value) #super(FIFO,self).__setitem__(key, value) fd=FIFO(3,{‘w‘:7,‘x‘:8,‘y‘:9,‘z‘:0}) print(fd) fd.update([(‘a‘,1),(‘b‘,2),(‘c‘,3),(‘d‘,4),(‘e‘,5)]) print(fd) fd.update({‘f‘:6,‘e‘:9}) print(fd) ****************************************分割線**************************************** 類繼承中的super: 1、super多重繼承的構造及實例函數,同普通多繼承:廣度優先,懶惰模式,即在匹配到第一個長輩類後就終止。 2、但是若首個長輩類也有super,就是貪婪模式了:公共爺類(如class E繼承了B?C?D,而B?C?D又繼承了A),僅執行一次;各父類的super前的代碼是廣度序,之後的代碼是廣度序。 class A: def __init__(self): print("Enter A") print("Leave A") class B(A): def __init__(self): print("Enter B") super(B, self).__init__() print("Leave B") class C(A): def __init__(self): print("Enter C") super(C, self).__init__() print("Leave C") class D(A): def __init__(self): print("Enter D") super(D, self).__init__() #此句取註或註釋後,各運行一次,觀察兩次結果的區別 print("Leave D") class E(B, C, D): def __init__(self): print("Enter E") super(E, self).__init__() print("Leave E") E()

正則、冒泡排序、多級排序、FIFO