Python入門知識點

基本變量與運算

  • 整數:10xff00int('123')int(1.23)
  • 浮點數:1.231.23e21.2e-5float('1.23')
  • 字符串:'abc'str(123)str(1.23)
  • 布爾值、運算符、布爾表達式:TrueFalseandornot3 > 2
  • 變量(類型不固定,因此無需定義類型):a = 1,a = 'abc'
    vi. 精確除:/,例如 10 / 3 的結果為3.33333333…
    vii. 整數除://,例如10 // 3的結果為3
    viii. 格式化字符串:'Age: %s. Gender: %s' % (25, True)
    ix. 條件判斷:(注意python是用縮進來代替{}的,注意判斷語句后的冒號)
if a == 0:
    print("a == 0")
elif a == 1:
    print("a == 1")
else:
    print("a is not 0 or 1")

x. 循環:可以用break和continue。

  1. for循環,數組迭代。
for x in [1,2,3]:
    print("x = ", x)
  1. for循環,range迭代。用range(N)生成0 ~ N - 1的整數序列
for x in range(5): 
     print("x = ", x)
  1. while循環。
x = 0
while x < 3:
    x += 1

常用容器類型

list

  • 說明:list也就是常用的數組/鏈表,數據按順序存儲。
  • 定義:s = ['Apple', 123, ['asp', 'php'],True]
  • 初始化:s = [0] * 100
  • 取出元素:s[1]s[2][1]s[-1](等價于 s[len(s) - 1]
  • 計算長度:len(s)
  • 追加元素:s.append('Adam')
  • 插入:s.insert(1, 'Jack')
  • 擴展(追加列表):s.extend(ss)
  • 刪除元素:s.pop(1),默認不加參數為刪除最后一個(index = -1)。
  • 排序:s.sort()
  • 查找元素序號:pos = s.index(value)
  • 切片:
    • s[ :3](取前3個元素)
    • s[1:4] (取1~3共3個元素)
    • s[-3: ](取最后3個元素)
    • s[ :10:2] (取前10個元素,每2個取1個,從第一次切片中的0元素開始計數)
    • s[::5](所有元素,每5個取1個,從0元素開始計數)
    • s[:](原樣復制一個list)
    • 備注:tuple和字符串也可以按照如上切片規律操作
  • Counter:Counter(list)來計算list中的set以及各個元素出現的次數。

tuple

  • 說明:tuple也即元組,是一旦初始化就不能修改的list
  • 定義:t = ('Michael', 'Bob', 'Tracy'),特例:定義一個元素的tuple, t = (1, )

set

  • 說明:set也即集合,類似于沒有重復元素的list
  • 定義:s = set([1, 2, 3]) (要創建一個set,需輸入一個list以供初始化)
  • 添加一個元素:s.add(4)
  • 刪除一個元素:s.remove(4)
  • 求兩個set的交集、并集:s1 & s2s1 | s2

dic

  • 說明:dic也即字典,也就是map,通過鍵值對(key value)存儲數據。
  • 定義:d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
  • 通過key取value:d['Michael']
  • 通過key給value賦值(覆蓋value,或者添加鍵值對):d['Bob'] = 67, d['Az'] = 69
  • 將dict2添加到dict中:dict.update(dict2)
  • 判斷元素存在:'Thomas' in d或者d.get('Thomas', -1)
  • 刪除鍵值對:d.pop('Bob')
  • 遍歷key:for key in dic:,按排序后的key遍歷:for i in sorted (dic) :

常用語法

main函數

main函數可以簡單認為是python腳本的起始點,但實際在main之前會執行全局代碼段,因此實際不用main函數代碼也可以執行。
main函數寫法如下:

if __name__ == '__main__':
    print("hello world!")

說明:__name__變量是一個特殊的內置Python變量,它顯示當前模塊的名稱。如果當前函數對應文件為程序執行文件,則__name__被標記為'__main__',否則__name__被標記為模塊名稱,這可以用于區分當前文件是執行文件還是作為模塊被導入的文件。通過下述這種方式在python腳本中標記main函數,可以使得main中的代碼在程序作為獨立腳本時運行,而作為導入模塊時不會運行。

定義函數

格式為:def <函數名>(<參數表>): <表達式>
注意對于python而言,不需要分號斷句,但對縮進有嚴格要求。
函數定義舉例如下:

def max(a,b):
   return a if a > b else b

調用函數

直接調即可:
a = max(1,2)

導入函數

格式為:from <文件名> import <函數名> ,文件名不含.py,例如:
from util import timer
如果想全部導入,可以使用:
from util import *

導入模塊

直接用import關鍵字導入即可,例如:
import sys
import numpy as np
如果運行提示沒有安裝對應模塊,可以使用pip install <package name>來安裝。

執行順序

python程序執行順序是按照全局代碼塊到main函數來執行的,因此對于下述代碼,執行順序是:
導入sys模塊 -> 執行global變量a初始化賦值 -> 執行global打印 -> 執行main函數 -> 執行test函數 -> 執行變量a賦值

import sys
a = 1
print("global")
def test():
    print("test")
if __name__ == '__main__':
    print("main")
    test()
    a = 2

常用第三方庫使用方法

numpy

說明:numpy是一個數學庫,主要用于數組和矩陣的計算。

  • 生成矩陣:
    • 生成一維矩陣:np.array([1,2,3,4])np.array(range(1,5))np.arrange(5)
    • 生成二維矩陣:np.array([1,2],[3,4])np.array([1,2,3,4]).reshape(2,2)
    • 生成零矩陣:np.zeros(shape=(2,2))
    • 生成一矩陣:np.ones(shape=(2,2))
    • 生成n * n的單位矩陣:np.identity(n)np.diag([1] * n)np.eye(n)
  • 矩陣最大、最小、平均值:np.max(img)np.min(img)np.mean(img)
  • 矩陣按值篩選,生成0、1掩膜矩陣:img < 3.14
  • 矩陣變形:A.reshape(m,n)
  • 帶通截止:np.clip(img, thresh_low, thresh_high)
  • 矩陣點乘A·B:np.dot(A,B)或者A.dot(B),按位乘Ai*Bi:A * B
  • 矩陣叉乘AxB:np.cross(A,B)
  • 求矩陣的模:np.linalg.norm(A)
  • 求矩陣的逆:np.linalg.inv(img)
  • 求矩陣的轉置:A.TA. transpose()

pyplot

說明:pyplot是Matplotlib 的子庫,提供了和MATLAB 類似的繪圖API,主要用于科學繪圖。

  • 導入pyplot:from matplotlib import pyplot as plt
  • 各種圖繪制:
    • 散點圖:plt.scatter(x,y, s = 5),其中x、y為數據對應的list,下同。
    • 點線圖:plt.plot(x,y,label='a',color='g',marker='o', linewidth=1, alpha=0.6)
    • 直方圖:plt.hist(x, color = "g")
    • 柱狀圖:plt.bar(x,y,label='pass',alpha = 0.6,fc = 'c'),可用Counter(origin_list)將一個有原始數據的list轉換為統計頻度的map,map的key為list中的各數據,也即x,value為出現的次數,也即y
    • 在同一坐標軸中繪制兩套數據:以繪制對比柱狀圖為例,再次調用plt.bar([x1+0.1 for x1 in x], y, label = 'fail',alpha = 0.6,fc = 'r'),其中x1+0.1是將第二套數據在坐標軸中總體偏移0.1,用于區分兩套數據。
    • 繪制多個子圖:plt.subplot(NMi),繪制NM列的第i張圖,例如121指繪制12列子圖中的第1張圖。
  • 圖片參數修改:
    • 修改圖片標題:plt.title(str)
    • 調整x、y軸坐標刻度:plt.xticks(x_label)plt.yticks(y_label),其中x_labely_label為希望標注的刻度值的list。
    • 設置x、y軸標題:plt.xlabel(str)plt.ylabel(str)
    • 設置圖例:plt.legend(loc='upper center', shadow=True, fontsize='x-large'),根據plot的label自動設定圖例文字。
    • 邊緣留白:plt.margins(2, 2)
    • Subplot間距:plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0),前四個參數為整幅圖在畫面中的上下左右位置,1代表是100%,hspacewspace代表副圖間隔與單幅圖的大小比例。說明見:https://blog.csdn.net/ggt55ng6/article/details/88879689
    • 圖片大小:plt.figure(figsize=(60,60))
    • 可用marker標記:
      image.png

OpenCV

說明:OpenCV是一個計算機視覺庫,主要用于圖像處理。

  • 讀取圖像:img = cv2.imread(img_dir, cv2.IMREAD_UNCHANGED)
  • 寫出圖像:cv2.imwrite(path, img)
  • 獲取圖像寬高與位數:img.shapeimg.dtype
  • 獲取BGRA通道:b,g,r,a = cv2.split(img)
  • 合并成新圖:img = cv2.merge((b, g, r, a))
  • 縮放:new_img = cv2.resize(img, (new_w,new_h), fx=x_ratio, fy=y_ratio, interpolation=cv2.INTER_AREA)
  • Padding:new_img = cv2.copyMakeBorder(img, pad_top, pad_bottom, pad_left, pad_right, cv2.BORDER_CONSTANT, value=0)

Dataframe

說明:Dataframe是pandas庫的一個表格型的數據結構,在對表操作時會用到。

  • 生成空的Dataframe:df = pd.Dataframe()
  • 從csv中讀取:df = pd.read_csv(file_path,index_col="index")
  • 列名列表:df.columns
  • 行名列表:df.index
  • 增加一列:df[key] = val
  • 修改列名:df.rename(columns={'a':'A'})
  • 按行列獲取數據:df.loc[index_a, COL_A],獲取index_a行,COL_A列的數據
  • 按某一列值獲取數據:df.loc[df[df[key_a] == val_a].index.tolist()[0], key_b]key_a列為val_a的第一行中,key_b列的值。
  • 篩選A列數據并返回篩選后的dataframe:df [df[COL_A] > val]
  • 篩選A列數據并返回對應B列的值:list(df [df[COL_A] > val][COL_B])
  • 增加一條數據:
s = pd.Series(list(infoMap.values()),index=infoMap.keys())
df.append(pd.DataFrame({nid:s}).T)
  • 去重:df.drop_duplicates(COL_A)
  • 刪除指定列:df.drop(columns=[COL_A, COL_B, COL_C])
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容