Python學習筆記 之 遞歸、二維數組順時針旋轉90°、正則表達式


遞歸、二維數組順時針旋轉90°、正則表達式

1、   遞歸算法是一種直接或間接調用自身算法的過程。

特點:

  • 遞歸就是在過程或函數里調用自身
  • 明確的遞歸結束條件,即遞歸出口
  • 簡潔,但是不提倡
  • 遞歸次數多容易造成棧溢出

要求:

  • 每次調用遞歸規模上有所減小
  • 前一次為后一次做准備
  • 規模較小時必須直接給出解答而不再進行遞歸調用

例子:遞歸實現二分法

 1 def searchMyData(mydate,a1):
 2     mid = int(len(mydate)/2)
 3     if mid >= 1:
 4         if mydate[mid]>a1:
 5             print("目標數據在%s左側"% mydate[mid])
 6             searchMyData(mydate[:mid],a1)
 7         elif mydate[mid]<a1:
 8             print("目標數據在%s右側"%mydate[mid])
 9             searchMyData(mydate[mid:],a1)
10         else:
11             print("We get it!")
12     else:
13         print("We can't find it!")
14 if __name__ == '__main__':
15     data = list(range(1,600,3))
16     print(data)
17     searchMyData(data,397)

結果:

[1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49, 52, 55, 58, 61, 64, 67, 70, 73, 76, 79, 82, 85, 88, 91, 94, 97, 100, 103, 106, 109, 112, 115, 118, 121, 124, 127, 130, 133, 136, 139, 142, 145, 148, 151, 154, 157, 160, 163, 166, 169, 172, 175, 178, 181, 184, 187, 190, 193, 196, 199, 202, 205, 208, 211, 214, 217, 220, 223, 226, 229, 232, 235, 238, 241, 244, 247, 250, 253, 256, 259, 262, 265, 268, 271, 274, 277, 280, 283, 286, 289, 292, 295, 298, 301, 304, 307, 310, 313, 316, 319, 322, 325, 328, 331, 334, 337, 340, 343, 346, 349, 352, 355, 358, 361, 364, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400, 403, 406, 409, 412, 415, 418, 421, 424, 427, 430, 433, 436, 439, 442, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472, 475, 478, 481, 484, 487, 490, 493, 496, 499, 502, 505, 508, 511, 514, 517, 520, 523, 526, 529, 532, 535, 538, 541, 544, 547, 550, 553, 556, 559, 562, 565, 568, 571, 574, 577, 580, 583, 586, 589, 592, 595, 598]

目標數據在301右側

目標數據在451左側

目標數據在376右側

目標數據在412左側

目標數據在394右側

目標數據在403左側

We get it

2、  二維數組90°順時針旋轉

 1 a = [[col for col in range(4)] for row in range(4)]
 2 for i in a:
 3     print(i)
 4 print('-'*20)
 5 for row_2 in range(4):
 6     for col_2 in range(row_2,4):
 7         tmp = a[row_2][col_2]
 8         a[row_2][col_2] = a[col_2][row_2]
 9         a[col_2][row_2] = tmp
10 
11 for i in a:
12     print(i)

結果:

[0, 1, 2, 3]

[0, 1, 2, 3]

[0, 1, 2, 3]

[0, 1, 2, 3]

--------------------

[0, 0, 0, 0]

[1, 1, 1, 1]

[2, 2, 2, 2]

[3, 3, 3, 3]

注:a[r][c] 表示二維列表的第2行第c列的元素,和數組表示方法類似

 

3、  正則表達式

 1 import re
 2 ret = re.match("abc","abcdef")
 3 print(ret)
 4 print(ret.group())
 5 ret = re.match("[0-9]","abc6fak")# 必須是字符串
 6 #match 是從開頭匹配,如果開頭不是數字,那么不可匹配
 7 ret = re.match("[0-9]{0,10}","abc6fak")# 匹配0~10次
 8 ret = re.match("[0-9]{10}","abc6fak")# 匹配10次
 9 if ret:
10     print(ret.group())
11 ret = re.findall("[0-9]{1,10}","213abc6fak")# 匹配所有數字
12 ret = re.findall("[0-9]{1,10}","213abc6fak")# 匹配所有字符
13 ret = re.findall(".*","1234aggh") # 匹配所有,最后有''
14 ret = re.findall(".","1234aggh") # 匹配單個字符
15 ret = re.findall(".+","1234aggh") # 匹配所有
16 ret = re.sub("\d+","|","1234aggh",count=2) # 替換前兩個
17 if ret:
18     print(ret)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM