正則、冒泡排序、多級排序、FIFO
阿新 • • 發佈:2017-10-19
() 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