我敢打賭,這份python入門教程看了絕對有用
前段時間用Python刷了一些題,把刷題的過程遇到的一些小知識點總結了一下,都是一些比較基礎的知識點,特別適合一些剛入門的新手看~
lambda表示式
-
lambda表示式是起到一個函式速寫的作用。允許在程式碼內嵌入一個函式的定義。它只是一個表示式,函式體比def簡單很多。
-
3個數求和的例子:
>>>f = lambda x,y,z:x+y+z >>>f(1,2,3) >>>6而如何要用正常函式實現上述功能的話,需要先用
def
定義函式名,程式碼如下:
>>>def f(x,y,z): >>>return x+y+z >>>n = f(1,2,3) >>>6
filter()、map()和reduce()函式的區別
-
filter()函式
包括兩個引數,分別是function和list。該函式根據function引數返回的結果是否為真來過濾list引數中的項,最後返回一個新列表,如下例所示:
>>>a=[1,2,3,4,5,6,7] >>>b=filter(lambda x:x>5, a) >>print b >>>[6,7]如果filter引數值為None,就使用identity()函式,list引數中所有為假的元素都將被刪除。如下所示:
>>>a=[0,1,2,3,4,5,6,7] b=filter(None, a) >>>print b >>>[1,2,3,4,5,6,7]
-
map()函式
-
map()的兩個引數一個是函式名,另一個是列表或元組。
>>>map(lambda x:x+3, a) #這裡的a同上 >>>[3,4,5,6,7,8,9,10]#另一個例子 >>>a=[1,2,3] >>>b=[4,5,6] >>>map(lambda x,y:x+y, a,b) >>>[5,7,9]
在刷題的過程中,map()函式通常可以結合輸入一起使用,例如在一行中輸入3個整數,可用如下語句:
a,b,c = map(int, input().split())
-
reduce()函式
-
reduce()函式接收的引數和 map()類似,一個函式 f,一個list,但行為和 map()不同,reduce()傳入的函式 f 必須接收兩個引數,reduce()對list的每個元素反覆呼叫函式f,並返回最終結果值。
-
例如,編寫一個f函式,接收x和y,返回x和y的和:
def f(x, y): return x + y
-
呼叫 reduce(f, [1, 3, 5, 7, 9])時,reduce函式將做如下計算:
-
先計算頭兩個元素:f(1, 3),結果為4;
-
再把結果和第3個元素計算:f(4, 5),結果為9;
-
再把結果和第4個元素計算:f(9, 7),結果為16;
-
再把結果和第5個元素計算:f(16, 9),結果為25;
-
由於沒有更多的元素了,計算結束,返回結果25。
range() 函式用法
-
range() 函式可建立一個整數列表,一般用在 for 迴圈中。語法如下:
range(start, stop, step)
-
例項:
>>>range(10)# 從 0 開始到 10 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> range(1, 11)# 從 1 開始到 11 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> range(0, 30, 5)# 步長為 5 [0, 5, 10, 15, 20, 25] >>> range(0, 10, 3)# 步長為 3 [0, 3, 6, 9] >>> range(0, -10, -1) # 負數 [0, -1, -2, -3, -4, -5, -6, -7, -8, -9] >>> range(0) [] >>> range(1, 0) []range 在 for 中的使用:
for i in range(n):# 正序遍歷,表示i的取值從0到n-1 for i in range(n,0,-1): # 倒序遍歷,表示i的取值從n到1
dict字典
-
dict字典使用鍵-值(key-value)儲存,具有極快的查詢速度。在Java中也稱為map。
-
舉個例子,假設要根據同學的名字查詢對應的成績,如果用list實現,需要兩個list:
names = ['Michael', 'Bob', 'Tracy'] scores = [95, 75, 85]
-
給定一個名字,要查詢對應的成績,就先要在names中找到對應的位置,再從scores取出對應的成績,list越長,耗時越長。
-
如果用dict實現,只需要一個“名字”-“成績”的對照表,直接根據名字查詢成績,無論這個表有多大,查詢速度都不會變慢。用Python寫一個dict如下:
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} >>> d['Michael'] 95我在刷題的時候,遇到一個問題就是需要在迴圈中動態往dict新增資料,但是沒有找到新增的函式,其實不用插入函式,迴圈中動態往dict新增資料也很簡單,如下所示:
dt = {}#先定義一個字典,注意是{},如果定義陣列是[] for i in range(n): dt[key[i]] = value[i]
sort與sorted的排序問題
-
sort引數說明
L.sort(cmp=None, key=None, reverse=False)sorted引數說明
sorted(iterable, cmp=None, key=None, reverse=False)
-
-
iterable:是可迭代型別,通常為一個集合;
-
cmp:用於比較的函式,比較什麼由key決定,有預設值,迭代集合中的一項;
-
key:用列表元素的某個屬性和函式進行作為關鍵字,有預設值,迭代集合中的一項;
-
reverse:排序規則. reverse = True 表示降序 或者 reverse = False 表示升序,預設值為False。
-
-
使用sort()方法對list排序會修改list本身,不會返回新list,使用方法如下:
my_list = [3, 5, 1, 4, 2] my_list.sort() print my_list #輸出: [1, 2, 3, 4, 5]而使用sorted()方法排序時會返回一個新的list:
my_list = [3, 5, 1, 4, 2] result = sorted(my_list)#返回一個新的list print result #輸出: [1, 2, 3, 4, 5]
常用的一些零散的小知識
-
求實數的多少次冪
-
正常在java和C語言中,求一個數的冪需要呼叫一個求冪的函式,但是Python中直接一個運算子就可以搞定了:
#Python求冪 10**2#10的平方 10**4#10的4次方
-
print(‘xx’,end=’’)中end問題
-
end是print()函式的一個引數。end 是輸出語句結束以後附加的字串,它的預設值是換行(’\n’)。如果輸出的時候不需要換行需要顯示的給
end
賦值。 -
例如輸出一個數組,每個數之間以空格隔開,可以用如下語句:
for i in range(n): print(data[i],end=' ')#end值為空格
-
如果只是單純的想要輸出不換行,可以令
end=''
,end值為空字串
-
// 與 / 的區別
-
“ / “ 表示浮點數除法,返回浮點結果;
-
“ // “ 表示整數除法,返回不大於結果的一個最大的整數
-
【code】
print("6 // 4 = " + str(6 // 4)) print("6 / 4 =" + str(6 / 4))【result】
6 // 4 = 1 6 / 4 =1.5
-
記得用set去除重複元素
-
如果一個數組中有很多重複元素,根據需求需要去除重複元素的話,可以使用set集合,類似於Java的HashSet。
-
語法很簡單,只需一行程式碼就可以去重,如下所示:
-
【code】
a = [1,1,2,2,3,4,5] a = set(a) print(a)【result】
{1, 2, 3, 4, 5}