我敢打賭,這份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函數將做如下計算:
  1. 先計算頭兩個元素:f(1, 3),結果為4;
  2. 再把結果和第3個元素計算:f(4, 5),結果為9;
  3. 再把結果和第4個元素計算:f(9, 7),結果為16;
  4. 再把結果和第5個元素計算:f(16, 9),結果為25;
  5. 由於沒有更多的元素了,計算結束,返回結果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}

ps:碼字不易,如果你覺得有幫助的話,幫忙轉發一下吧~

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

微信公眾號:輪子工廠,機器學習 | 數據結構與算法 | 源碼分析 | 資源與工具分享


分享到:


相關文章: