Python資料處理典型用法

海布里Simple發表於2024-11-03

注意:以下基於Python3

基礎篇

一、資料型別

1.list中增加元素,追加元素到末尾:list.append(‘元素’)、插入到指定的位置:list.insert(‘索引號’,‘元素’);刪除末尾的元素:list.pop、刪除指定位置的元素:list.pop(‘索引號’)

2.input()返回的資料型別是str

3.迭代/迴圈:for x in ... 把每個元素代入變數x,然後執行縮排塊的語句

4.dict中避免key不存在的錯誤2種方法,1、透過in判斷key是否存在:'Jia' in dict 返回Ture或False 2、透過dict提供的get()方法:dict.get('Yannan');刪除元素:dict.pop(key)

5.set:和dict類似,也是一組key的集合,但不儲存value。由於key不能重複,所以,在set中,沒有重複的key。要建立一個set,需要提供一個list作為輸入集合:s = set([1,2,3]).

新增元素:s.add(key) 刪除元素:s.remove(key)。set可以看成數學意義上的無序和無重複元素的集合,因此,兩個set可以做數學意義上的交集、並集等操作:交集& 並集 |

6.列表倒序方法:list = [3,5,4] list.sort() >>[3,4,5]

7.字串的元素替代方法:s = 'abc' s.replace('a','A') >>'Abc' 謹記變數s仍是'abc' 原因是replace方法建立了一個新的字串'Abc'

二、函式

1.函式名其實就是指向一個函式物件的引用,完全可以把函式名賦給一個變數,相當於給這個函式起了一個“別名”:ads(-100) >>100 a = abs a(-67) >>67

2.空函式

1 def nop():
2     pass

pass語句什麼都不做,那有什麼用?實際上pass可以用來作為佔位符,比如現在還沒想好怎麼寫函式的程式碼,就可以先放一個pass,讓程式碼能執行起來。

pass還可以用在其他語句裡,比如:

1 if age >=18:
2     pass

缺少了pass,程式碼執行就會有語法錯誤。

3.函式可以同時返回多個值,但其實就是一個tuple

4.函式執行完畢也沒有return語句時,自動return None

5.如果有必要,可以先對引數的資料型別做檢查

6.除了正常定義的必選引數外,還可以使用預設引數可變引數、關鍵字引數和命名關鍵字引數,使得函式定義出來的介面,不但能處理複雜的引數,還可以簡化呼叫者的程式碼

7.計算x的n次方的方法,使用while迴圈

1 def power(x, n):
2     s = 1
3     while n > 0:
4         n = n - 1
5         s = s * x
6     return s

8.可變引數 計算a2 + b2 + c2 + ……

1 def calc(*numbers):
2     sum = 0
3     for n in numbers:
4         sum = sum + n * n
5     return sum

9.關鍵字引數

可變引數允許你傳入0個或任意個引數,這些可變引數在函式呼叫時自動組裝為一個tuple。而關鍵字引數允許你傳入0個或任意個含引數名的引數,這些關鍵字引數在函式內部自動組裝為一個dict

1 def person(name, age, **kw):
2     print('name:', name, 'age:', age, 'other:', kw)

關鍵字引數有什麼用?它可以擴充套件函式的功能。比如,在person函式里,我們保證能接收到nameage這兩個引數,但是,如果呼叫者願意提供更多的引數,我們也能收到。試想你正在做一個使用者註冊的功能,除了使用者名稱和年齡是必填項外,其他都是可選項,利用關鍵字引數來定義這個函式就能滿足註冊的需求。

10.命名關鍵字引數 命名的關鍵字引數是為了限制呼叫者可以傳入的引數名,同時可以提供預設值。

1 def person(name, age, *, city, job):
2     print(name, age, city, job)

和關鍵字引數**kw不同,命名關鍵字引數需要一個特殊分隔符**後面的引數被視為命名關鍵字引數

11.遞迴函式 計算階乘n!

1 def fact(n):
2     if n==1:
3         return 1
4     return n * fact(n - 1)

遞迴函式的優點是定義簡單,邏輯清晰。理論上,所有的遞迴函式都可以寫成迴圈的方式,但迴圈的邏輯不如遞迴清晰。缺點是過深的呼叫會導致棧溢位。

12.切片

L[0:3]表示,從索引0開始取,直到索引3為止,但不包括索引3。即索引012,正好是3個元素。

L = list(range(10)) >>L[:9:2] >>[0, 2, 4, 6, 8] 第三個數字是步長

13.迭代

在Python中,迭代是透過for ... in來完成的

迭代dict中的key、value、key和value:for key in dict、for value in d.values()、for k,v in d.items()

如何判斷一個物件是可迭代物件呢?方法是透過collections模組的Iterable型別判斷:

>>> from collections import Iterable
>>> isinstance('abc', Iterable)      # str 是否可迭代
True
>>> isinstance([1,2,3], Iterable)   # list 是否可迭代
True  
>>> isinstance(123, Iterable)        # 整數 是否可迭代
False

14.列表生成式

>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]

還可以使用兩層迴圈,可以生成全排列:

>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

運用列表生成式,可以寫出非常簡潔的程式碼。例如,列出當前目錄下的所有檔案和目錄名,可以透過一行程式碼實現:

>>> import os # 匯入os模組
>>> [d for d in os.listdir('.')] # os.listdir可以列出檔案和目錄

列印dict中的 key=value,並輸出一個列表:

>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> [k + '=' + v for k, v in d.items()]
['y=B', 'x=A', 'z=C']

一個list中所有的字串變成小寫:

>>> L = ['Hello', 'World', 'IBM', 'Apple']
>>> [s.lower() for s in L]
['hello', 'world', 'ibm', 'apple']

15.生成器

g = (x * x for x in range(10))
>>> next(g)
0
>>> next(g)
1

generator儲存的是演算法,每次呼叫next(g),就計算出g的下一個元素的值,直到計算到最後一個元素,沒有更多的元素時,丟擲StopIteration的錯誤。

當然,上面這種不斷呼叫next(g)實在是太變態了,正確的方法是使用for迴圈,因為generator也是可迭代物件

>>> g = (x * x for x in range(10))
>>> for n in g:
...     print(n)

所以,我們建立了一個generator後,基本上永遠不會呼叫next(),而是透過for迴圈來迭代它,並且不需要關心StopIteration的錯誤。

斐波拉契數列(Fibonacci),除第一個和第二個數外,任意一個數都可由前兩個數相加得到:

1, 1, 2, 3, 5, 8, 13, 21, 34, ...

1 def fib(max):
2     n, a, b = 0, 0, 1
3     while n < max:
4         print(b)
5         a, b = b, a + b
6         n = n + 1
7     return 'done'

16.迭代器

生成器都是Iterator物件,但listdictstr雖然是Iterable(可迭代物件),卻不是Iterator(迭代器)

listdictstrIterable變成Iterator可以使用iter()函式:

>>> isinstance(iter([]), Iterator)
True
>>> isinstance(iter('abc'), Iterator)
True

凡是可作用於for迴圈的物件都是Iterable型別;

凡是可作用於next()函式的物件都是Iterator型別,它們表示一個惰性計算的序列;

集合資料型別如listdictstr等是Iterable但不是Iterator,不過可以透過iter()函式獲得一個Iterator物件。

相關文章