1、遞迴
有一個list,如 L = ['A', 'B', ['C', 'D', ['E']]],現在希望將其以如下格式列印在螢幕上(每多一層列表嵌套,則在其前面多列印4個空格)
A
B
C
D
E
代碼如下
def print_lol(L, indents=4, flag=True):for x in L:if isinstance(x, list):print_lol(x, indents+4, flag)else:for i in range(indents-4):print(' ', end='')print(x)
2、函數的預設參數
def f(a, b=1, c=2, d=3, e='hello'):print('a = ' + str(a), end=', ')print('b = ' + str(b), end=', ')print('c = ' + str(c), end=', ')print('d = ' + str(d), end=', ')print('e = ' + e)f(100)f(100, 200)f(100,d=300)f(100, 'hi')
運行結果為
a = 100, b = 1, c = 2, d = 3, e = hello
a = 100, b = 200, c = 2, d = 3, e = hello
a = 100, b = 1, c = 2, d = 300, e = hello
a = 100, b = hi, c = 2, d = 3, e = hello
現在,我們來看一看BIF print函數的原型
print(value, sep=' ', end='\n', file=sys.stdout)
怎樣來將print的結果重新導向到檔案中,現在你應該知道了吧
3、Python中的排序
A = [1, 3, 5, 2, 4, 7,8, 6]B = [1, 3, 5, 2, 4, 7,8, 6]A.sort()print(A)print(sorted(B))print(B)
運行結果為
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 3, 5, 2, 4, 7, 8, 6]可見,列表的sort方法為in-place sorting,而BIF sorted為copied sorting
這兩個排序方法的預設排序次序是升序,如果想改為降序,則傳入一個參數
reverse=True即可。4、檔案與字串相關操作現有一個檔案名稱為"D:\\360安全瀏覽器下載\\james.txt",裡面的內容如下:
2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-222.59,2.11,2:11,2:23,3-10,2-23,3:10,3.21,3-212:22,3.01,3:01,3.02,3:02,3.02,3:22,2.49,2:382:58,2.58,2:39,2-25,2-55,2:54,2.18,2:55,2:55
這是一些時間的記錄,現在想把每一個時間記錄轉為標準格式(hour:minute)並存入一個列表,然後將該列表按時間大小逆序輸出。
代碼如下
def sanitate(time_string):if '.' in time_string: # 用關鍵字in來判斷某個字元是否在一個字串內splitter = '.'elif '-' in time_string:splitter = '-'else:return time_string(minute, second) = time_string.split(splitter)return minute + ':' + secondresults = []# 建立一個listwith open('D:\\360安全瀏覽器下載\\james.txt') as data:for line in data:theList = line.strip().split(',')# strip不僅會去迴轉尾的空白,還會去掉\nfor item in theList:results.append(sanitate(item))for item in sorted(results):print(item)
5、List ComprehensionList Comprehension機制可以協助我們將一個List轉換為另一個List。通常我們在做轉換時,需要以下4個步驟:
- 建立一個List B;
- 迭代原List A中的每一個item;
- 在迭代每一個item時,對其進行處理;
- 將處理的結果append到B中
而使用List Comprehension方式,我們可以如下來自動完成清單轉換,只需一行代碼:B = [func(t) for t in A]例如
A = [1, 2, 3, 4]B = [m*100 for m in A]print(B)
結果為:[100,200,300,400]
再如:
A = ['aa','bb','CC','d']B = [m.upper() for m in A] # upper方法用於將字串中的全部小寫字母變為大寫字母
上一節中的14~18行也可改為
with open('D:\\360安全瀏覽器下載\\james.txt') as data:for line in data:theList = line.strip().split(',')# strip不僅會去迴轉尾的空白,還會去掉\nresults.append([sanitate(x) for x in theList])
6、訪問數組元素
A = [0, 1, 2, 3, 4]print(A[0:3])# A[0:3]代表索引從0到2的子列表
運行輸出:
[0, 1, 2]
7、去除list中的重複元素
在第4例中,如果想將最終list中重複的元素刪除,且最後只輸出表中的前3個元素,該怎麼辦?
def sanitate(time_string):if '.' in time_string: # 用關鍵字in來判斷某個字元是否在一個字串內splitter = '.'elif '-' in time_string:splitter = '-'else:return time_string(minute, second) = time_string.split(splitter)return minute + ':' + secondresults = []# 建立一個listwith open('D:\\360安全瀏覽器下載\\james.txt') as data:for line in data:theList = line.strip().split(',')# strip不僅會去迴轉尾的空白,還會去掉\nfor item in theList:results.append(sanitate(item))finalResults = []for item in sorted(results):if not item in finalResults:finalResults.append(item)print(finalResults[0:3])
pop的用法
如果A是一個list,那麼A.pop()則返回並刪除A中的最後一個元素,A.pop(i)則返回並刪除A中的第i個元素
將一個list附在另一個list的後面
現有2個List(A和B),希望將B附在A的後面
A = [1, 2, 3]B = [4, 5, 6]C = ['A', 'B', 'C']A.extend(B)for x in C:A.append(x)print(A) # 輸出 [1, 2, 3, 4, 5, 6, 'A', 'B', 'C']
如果使用A.append(B),那麼輸出是
[1, 2, 3, [4, 5, 6]]
字典(dict結構)
A = {} # 建立一個空的dictionaryB = dict()print(type(A)) # 輸出 <class 'dict'>print(type(B)) A['name'] = 'ccc'A['age'] = 24print(A) # 輸出 {'age': 24, 'name': 'ccc'}A['name'] = 'xt'print(A) # 輸出 {'age': 24, 'name': 'xt'}