ncuma_串列.pptx

NCU MCL
NCU MCLSoftware Developer at NCU MCL
串 列
簡要 python 學習講義
串列 : list
 由排成一列的元素組成
2
a = [ 1 , 2 , 3 , 4 ] # 四個元素
b = [ 8.3 ] # 一個元素
c = [ 2 , ”cat” , 3.4 ] # 串列元素可以不同型別
d = [ [ 1 , 2 ] , 3+2j ] # 串列元素也可以為串列
e = [] # 空串列
 串列長度: len()
a = len([9,4]) # a 為 2
b = [ [8,5,6] , ”dog” ]
c = len(b) # c 為 2
 同時設定數個串列
>>> a , b = [5,7] , [”cat”,”ox”] # a = [5,7] , b = ["cat","ox"]
# 混合型別設定
>>> c , d , e = [3] , 87 , ”ox” # c = [3] , d = 87 , e = "ox"
國立中央大學數學系
串列下標 : 取出單一元素
 串列元素可用下標取得
3
a = [ 9 , ”中央” , ”math” , 2.5 , [2,8] ]
a 9 ”中央” ”math” 2.5 [2,8]
正向下標
正向元素
0 1 2 3 4
a[0] a[1] a[2] a[3] a[4]
逆向下標
逆向元素
-5 -4 -3 -2 -1
a[-5] a[-4] a[-3] a[-2] a[-1]
 二維串列:串列元素為串列
>>> b = [ [1,2] , [9,4,5] ]
>>> c = b[0][1] # c = 2
>>> d = b[1][0] # d = 9
>>> e = len(b) # e = 2
>>> f = len(b[1]) # f = 3
國立中央大學數學系
下標範圍 (一): 取出多個元素
 如果 a 為一串列
4
 a[i:j] : a[i] , a[i+1] , a[i+2] , … , a[j-1]
 a[i:] : a[i] , a[i+1] , a[i+2] , … , a[-1]
 a[-i:] : a[-i] , a[-i+1] , a[-i+2] , ... a[-1]
 a[:j] : a[0] , a[1] , a[2] , … , a[j-1]
 a[i:j:k] : a[i] , a[i+k] , a[i+2k] , … ,
末尾元素下標小於 j
 a[i:j:-k]: a[i] , a[i-k] , a[i-2k] , ... ,
末尾元素下標大於 j
 a[:] : a[0] , a[1] , a[2] , … , a[-1] 全部元素
 a[::-1] : a[-1] , a[-2] , a[-3] , … , a[0]
逆向取全部元素
國立中央大學數學系
下標範圍 (二)
5
a[2:] [4,7,8] 第三個元素之後
a[-2:] [7,8] 末兩個元素
a[:3] [9,3,4] 前三個元素
a[1:-1:2] [3,7]
a[:] [9,3,4,7,8] 全部元素
a[::-1] [8,7,4,3,9] 逆向取元素
a[::-2] [8,4,9]
a[1:-1] [3,4,7] 去除頭尾的元素
a[-2:0:-1] [7,4,3] 逆向取中間元素
a[:3][::-1] [4,3,9] 取前三個元素,再逆向
a[-3:][::-1] [8,7,4] 取後三個元素,再逆向
 範例 :
a [9,3,4,7,8] 原串列
國立中央大學數學系
更動元素 (一)
 更改單一元素
6
a = [ 9 , ’中央’ , ’math’ , 2.5 , [ 2 , 8 ] ]
動作 a
a[2] = ’數學’ [9, ’中央’, ’數學’, 2.5, [2, 8]]
a[-1] = [] [9, ’中央’, ’數學’, 2.5, []]
國立中央大學數學系
更動元素 (二)
 更改部份元素
7
>>> a[:2] = [ ’ncu’ ] # 將前兩個元素更改為 ’ncu’
>>> a
[’ncu’, ’math’, 2.5, [2, 8]]
>>> a[-2:] = [] # 去除末兩個元素
>>> a
[’ncu’, ’math’]
僅能更改正向緊鄰的元素:
>>> a = [1,2,3,4,5]
>>> a[::2] = [10,20] # 錯誤
>>> a[::-1] = [10,20] # 錯誤
>>> a[::1] = 10 # 錯誤,缺中括號
>>> a[::1] = [20,30] # a 變成 [1,20,30,4,5]
>>> a[:] = [10,20] # a 變成 [10,20]
國立中央大學數學系
更動元素 (三)
 末端加元素或串列
8
也可使用 append 函式
>>> a = [1,2]
>>> a += [3] # a = [1,2,3]
>>> a = a + [4,5] # a = [1,2,3,4,5]
>>> a[len(a):] = [6] # a = [1,2,3,4,5,6]
>>> a[len(a):] = [7,8] # a = [1,2,3,4,5,6,7,8]
>>> a = [1,2]
>>> a.append(3) # a = [1,2,3]
>>> a.append([4,5]) # a = [1,2,3,[4,5]]
國立中央大學數學系
for 迴圈與串列 (一)
 一維串列
使用下標:透過 len 取得串列長度
直接取得元素
9
a = [ 5 , 8 , 7 ]
for i in range( len(a) ) :
print( a[i] ) # 印出 5 8 7 三列
a = [ 5 , 8 , 7 ]
for x in a : # 迴圈每次由 a 取元素為 x
print( x ) # 輸出同上
國立中央大學數學系
for 迴圈與串列 (二)
 二維串列
使用下標:透過 len 取得串列長度
10
b = [ [1] , [8, 2] , [6, 4, 3] ]
for i in range( len(b) ) : # len(b) 為串列 b 長度
for j in range( len(b[i]) ) : # len(b[i]) 為串列 b[i] 長度
print( b[i][j] , end=" " )
print()
輸出:
1
8 2
6 4 3
國立中央大學數學系
for 迴圈與串列 (三)
 二維串列
直接取得元素
11
b = [ [1] , [8, 2] , [6, 4, 3] ]
for p in b : # 串列 p 依次為 [1], [8,2], [6,4,3]
for x in p : # 每次由 p 取元素存為 x (整數)
print( x , end=" " )
print() # 輸出同上
for p in [ [1] , [8,2] , [6,4,3] ] # 串列 p 依次為 [1], [8,2], [6,4,3]
for x in p :
print( x , end=" " )
print() # 輸出同上
國立中央大學數學系
 串列可直接置於 in 之後:
a in A 與 a not in A : a 是否(不)在 A 串列內
 a in A : 檢查 a 是否在 A 串列內,回傳真假值
 a not in A : 檢查 a 是否不在 A 串列內,回傳真假值
 列印數字不重複的三位數,輸出十個數字一列:
12
c = 0
for x in range(1,10):
for y in range(0,10):
if x == y : continue
for z in range(0,10):
if z in [x,y] : continue
c += 1
print( x*100+y*10+z , end=(” ” if c%10 else ”n”) )
102 103 104 105 106 107 108 109 120 123
124 125 126 127 128 129 130 132 134 135
136 137 138 139 140 142 143 145 146 147
148 149 150 152 153 154 156 157 158 159
...
國立中央大學數學系
串列初始值設定 (一): list comprehension
 基本型式
13
>>> [ x for x in range(4) ] # x 為參數,可為其他有效變數名稱
[0, 1, 2, 3]
>>> [ t*t for t in [1,2,3] ]
[1, 4, 9]
>>> [ t//2+1 for t in range(10) ]
[1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
>>> [ [x,x*x] for x in range(3) ] # 二維串列:串列元素為串列
[[0, 0], [1, 1], [2, 4]]
國立中央大學數學系
串列初始值設定 (二)
 有條件式的設定
14
 多重迴圈設定
>>> [ x for x in range(10) if x not in [3,4,5] ]
[0, 1, 2, 6, 7, 8, 9]
>>> [ x for x in range(10) if x not in range(3,6) ]
[0, 1, 2, 6, 7, 8, 9]
>>> [ [x,x*x] for x in range(4) if x%2 ]
[[1, 1], [3, 9]]
>>> [ x+y for x in range(3) for y in range(2) ]
[0, 1, 1, 2, 2, 3]
>>> [ [x,y] for x in range(3) for y in range(10,12) ]
[[0, 10], [0, 11], [1, 10], [1, 11], [2, 10], [2, 11]]
國立中央大學數學系
串列合成與複製
 合成串列 : +
15
 元素複製 : *
 合併使用 + 與 *
a = [1,2,3] + [4,5] # a = [1,2,3,4,5]
a = [0] * 5 # a = [0,0,0,0,0]
b = [1,2] * 3 # b = [1,2,1,2,1,2]
c = [1]*2 + [2]*3 # c = [1,1,2,2,2]
國立中央大學數學系
乘法複製陷阱
 陷阱:以乘法複製串列,元素都佔用同個空間,這種現象
很容易造成二維串列元素處理上的疏忽
16
>>> a = [3,4]
>>> b = [a]*2 # b = [[3, 4],[3, 4]]
>>> a[1] = 8 # 設定 a[1] = 8
>>> b # b 的對應位置也變成 8 !!!
[[3, 8], [3, 8]]
 正確方式:使用 [:] 複製元素,元素各自獨立
>>> a = [1,2]
>>> c = [ a[:] for x in range(2) ]
>>> c[0][0] = 3
>>> c
[[3, 2], [1, 2]]
 若 c = [a[:]]*2 ,設定 c[0][0] = 3 ,則 c = [[3, 2], [3, 2]]
國立中央大學數學系
設定一到三維串列 (一)
 一維串列
17
 None 為 python 常數,代表數值尚未設定
a = [ 1 ] * 3 # a = [1, 1, 1]
b = [ None ] * 3 # b = [None, None, None]
國立中央大學數學系
設定一到三維串列 (二)
18
 二維串列
設定 3x2 二維串列
>>> c = [ [None]*2 for x in range(3) ]
>>> c
[[None, None], [None, None], [None, None]]
設定列元素數量遞增的二維串列
>>> d = [[None]*(i+1) for i in range(3) ]
>>> d
[[None], [None, None], [None, None, None]]
國立中央大學數學系
for 迴圈與一維串列
19
 for 迴圈內變數可直接取用串列元素
s = 0
for x in [1,4,9,16,25] : s += x # 計算串列元素和
s = 0
for x in [ i*i for i in range(1,6) ] : # 同上
s += x
國立中央大學數學系
20
for 迴圈與二維串列
 各別串列元素分別設定到 x 與 y
 各別串列元素設定為 p 串列
for x , y in [ [1,2] , [4,5] ] :
print( x , ’+’ , y , ’=’ , x+y )
輸出 :
1 + 2 = 3
4 + 5 = 9
for p in [ [1,2] , [4,5] ] :
print( p[0] , ’+’ , p[1] , ’=’ , p[0]+p[1] )
輸出同上
國立中央大學數學系
字串分解成字元串列
 使用 list 分解字串
21
>>> list( "abc" )
[’a’, ’b’, ’c’]
>>> list( "123" )
[’1’, ’2’, ’3’]
 分解數字成數字串列
>>> n = 423
>>> a = [ int(x) for x in list(str(n)) ] # a = [4, 2, 3]
# 以上 list 可省略
>>> b = [ int(x) for x in str(n) ] # b = [4, 2, 3]
>>> s = 0
>>> for x in ”423” : s += int(x) # 字串的各數字相加
>>> print(s) # 印出 9
國立中央大學數學系
tuple : 常串列 (一)
 tuple 為元素一旦設定後即不可更動的串列
 使用小括號
22
>>> a = (1,2,3) # a 有三個元素,小括號可省略
>>> a[0] = 5 # 錯誤,不可更動
>>> b = ( 3,4 )*2 # b = (3, 4, 3, 4)
>>> c = () # 空 tuple
國立中央大學數學系
tuple : 常串列 (二)
23
 一個元素的常串列需加逗點
>>> d = ( 5, ) # d 為常串列,僅有一個元素 5
>>> d
(5,)
>>> e = ( 5 ) # e 為整數 5,不是常串列
>>> e
5
>>> f = () # f 為空常串列
>>> f
()
國立中央大學數學系
tuple 與 list 型別互換
 使用 tuple 與 list 互換型別
24
>>> a = [ 3 ]
>>> b = tuple(a) # b = (3,)
>>> c = (5,4,3)
>>> d = list(c) # d = [5, 4, 3]
國立中央大學數學系
星號式子 (一) : 用於串列物件
 用來合併多個元素成為串列或者是拆解串列成個別元素
 在等號左側 : 合併(打包)元素為串列
25
5 串列(二)
 等號左側僅能有一個星號式子
函式參數設定 運算結果 說明
( a , *b ) = (1,2,3,4) a = 1 , b = [2,3,4] 小括號可省略
*a , b , c = [1,2,3,4] a = [1,2]
b = 3 , c = 4
*a , b = 1 錯誤 右式不是常串列,缺逗號
a , *b = 1 , a = 1 , b = []
*a , b = 1 , a = [] , b = 1
*a = 1 , 2 , 3 錯誤 左式不是常串列,缺逗號
*a , = 1 , 2 , 3 a = [1,2,3]
*a , = () a = []
a = 1 , 2 , 3 a = (1,2,3) 此為設定常串列
a = [ 1 , 2 , 3 ] a = [1,2,3] 此為設定串列
星號式子 (二)
 在等號右側 : 拆解串列成元素
26
函式參考設定 運算結果 說明
x = [4,5]
( a , b , c ) = ( 3 , *x )
a = 3
b = 4 , c = 5
小括號可省略
x = [1,2]
a , b = *x ,
a = 1
b = 2
末尾逗號不可省略
x = [1,2]
a , b , c = *x ,
錯誤 等號左側多一個變數
x = [1,2,3] , y = [4]
a , b , c , d = *x , *y
a = 1 , b = 2
c = 3 , d = 4
等號右側可有多個
星號用來拆解串列
國立中央大學數學系
sum 求和函式
>>> sum( [1, 3, 7] ) # 需為串列或常串列
11
>>> sum( (1, 3, 7) + (4, 2) ) # 先合成兩常串列後求和
17
27
 計算串列的數字和
國立中央大學數學系
max , min 求最大值與最小值
 找出串列的極值
28
>>> max( (2, 9, 7) )
9
>>> min( [4, 2, 8, 9] )
2
國立中央大學數學系
lambda 函式: 設定僅有單一式子的匿名函式
 使用 lambda 定義匿名函式
以上 lambda 函式設定等同
 多個參數的 lambda 函式
29
import math
fn = lambda x : int(math.sqrt(x)*10) # 定義 fn 為 lambda 函式
for s in range(1,100) : print( fn(s) )
def fn( x ) : # 詳見第九章函式
return int(math.sqrt(x)*10)
>>> f = lambda y , m , d : "{}-{:0>2}-{:0>2}".format(y,m,d)
>>> print( f(2018,9,1) )
2018-09-01
>>> g = lambda s , t : ( s , t , s+t )
>>> g(1,2)
(1, 2, 3)
國立中央大學數學系
 lambda 函式僅能有一個式子
1 of 29

Recommended

Ppt 51-77 by
Ppt 51-77Ppt 51-77
Ppt 51-77hungchiayang1
2.1K views27 slides
Ppt 51-77 by
Ppt 51-77Ppt 51-77
Ppt 51-77hungchiayang1
122 views27 slides
Ch4 教學 by
Ch4 教學Ch4 教學
Ch4 教學hungchiayang1
1K views49 slides
Ch4 by
Ch4Ch4
Ch4Alisha Smile
330 views103 slides
Ppt 1-25 by
Ppt 1-25Ppt 1-25
Ppt 1-25hungchiayang1
115.1K views25 slides
ncuma_字串.pptx by
ncuma_字串.pptxncuma_字串.pptx
ncuma_字串.pptxNCU MCL
238 views19 slides

More Related Content

Similar to ncuma_串列.pptx

Ch8 教學 by
Ch8 教學Ch8 教學
Ch8 教學hungchiayang1
741 views34 slides
Ppt 1-50 by
Ppt 1-50Ppt 1-50
Ppt 1-50hungchiayang1
1.6K views50 slides
Ch1 教學 by
Ch1 教學Ch1 教學
Ch1 教學hungchiayang1
13.5K views33 slides
ncuma_型別與迴圈.pptx by
ncuma_型別與迴圈.pptxncuma_型別與迴圈.pptx
ncuma_型別與迴圈.pptxNCU MCL
19.8K views26 slides
Ppt 101-119 by
Ppt 101-119Ppt 101-119
Ppt 101-119hungchiayang1
1.4K views19 slides
Ch5 教學 by
Ch5 教學Ch5 教學
Ch5 教學hungchiayang1
1.1K views50 slides

Similar to ncuma_串列.pptx(20)

More from NCU MCL

函數畫圖_習題4.pptx by
函數畫圖_習題4.pptx函數畫圖_習題4.pptx
函數畫圖_習題4.pptxNCU MCL
292 views1 slide
數值積分法_3.pptx by
數值積分法_3.pptx數值積分法_3.pptx
數值積分法_3.pptxNCU MCL
861 views1 slide
數值積分法_2.pptx by
數值積分法_2.pptx數值積分法_2.pptx
數值積分法_2.pptxNCU MCL
54 views1 slide
數值積分法_1.pptx by
數值積分法_1.pptx數值積分法_1.pptx
數值積分法_1.pptxNCU MCL
60 views1 slide
數值求根習題_1.pptx by
數值求根習題_1.pptx數值求根習題_1.pptx
數值求根習題_1.pptxNCU MCL
84 views1 slide
函數微分習題_3.pptx by
函數微分習題_3.pptx函數微分習題_3.pptx
函數微分習題_3.pptxNCU MCL
532 views3 slides

More from NCU MCL(20)

函數畫圖_習題4.pptx by NCU MCL
函數畫圖_習題4.pptx函數畫圖_習題4.pptx
函數畫圖_習題4.pptx
NCU MCL292 views
數值積分法_3.pptx by NCU MCL
數值積分法_3.pptx數值積分法_3.pptx
數值積分法_3.pptx
NCU MCL861 views
數值積分法_2.pptx by NCU MCL
數值積分法_2.pptx數值積分法_2.pptx
數值積分法_2.pptx
NCU MCL54 views
數值積分法_1.pptx by NCU MCL
數值積分法_1.pptx數值積分法_1.pptx
數值積分法_1.pptx
NCU MCL60 views
數值求根習題_1.pptx by NCU MCL
數值求根習題_1.pptx數值求根習題_1.pptx
數值求根習題_1.pptx
NCU MCL84 views
函數微分習題_3.pptx by NCU MCL
函數微分習題_3.pptx函數微分習題_3.pptx
函數微分習題_3.pptx
NCU MCL532 views
SymPy 在微積分上的應用_3.pptx by NCU MCL
SymPy 在微積分上的應用_3.pptxSymPy 在微積分上的應用_3.pptx
SymPy 在微積分上的應用_3.pptx
NCU MCL27 views
SymPy 在微積分上的應用_2.pptx by NCU MCL
SymPy 在微積分上的應用_2.pptxSymPy 在微積分上的應用_2.pptx
SymPy 在微積分上的應用_2.pptx
NCU MCL26 views
SymPy 在微積分上的應用_1.pptx by NCU MCL
SymPy 在微積分上的應用_1.pptxSymPy 在微積分上的應用_1.pptx
SymPy 在微積分上的應用_1.pptx
NCU MCL30 views
極座標畫圖_3.pptx by NCU MCL
極座標畫圖_3.pptx極座標畫圖_3.pptx
極座標畫圖_3.pptx
NCU MCL12 views
極座標畫圖_2.pptx by NCU MCL
極座標畫圖_2.pptx極座標畫圖_2.pptx
極座標畫圖_2.pptx
NCU MCL15 views
極座標畫圖_1.pptx by NCU MCL
極座標畫圖_1.pptx極座標畫圖_1.pptx
極座標畫圖_1.pptx
NCU MCL12 views
Taylor 多項式_3.pptx by NCU MCL
Taylor 多項式_3.pptxTaylor 多項式_3.pptx
Taylor 多項式_3.pptx
NCU MCL8 views
Taylor 多項式_2.pptx by NCU MCL
Taylor 多項式_2.pptxTaylor 多項式_2.pptx
Taylor 多項式_2.pptx
NCU MCL10 views
Taylor 多項式_1.pptx by NCU MCL
Taylor 多項式_1.pptxTaylor 多項式_1.pptx
Taylor 多項式_1.pptx
NCU MCL8 views
微分方程式求解_3.pptx by NCU MCL
微分方程式求解_3.pptx微分方程式求解_3.pptx
微分方程式求解_3.pptx
NCU MCL40 views
微分方程式求解_2.pptx by NCU MCL
微分方程式求解_2.pptx微分方程式求解_2.pptx
微分方程式求解_2.pptx
NCU MCL30 views
微分方程式求解_1.pptx by NCU MCL
微分方程式求解_1.pptx微分方程式求解_1.pptx
微分方程式求解_1.pptx
NCU MCL24 views
牛頓迭代法_3.pptx by NCU MCL
牛頓迭代法_3.pptx牛頓迭代法_3.pptx
牛頓迭代法_3.pptx
NCU MCL18 views
牛頓迭代法_2.pptx by NCU MCL
牛頓迭代法_2.pptx牛頓迭代法_2.pptx
牛頓迭代法_2.pptx
NCU MCL16 views

Recently uploaded

AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班 by
AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班
AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班IttrainingIttraining
43 views25 slides
商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班 by
商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班
商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班IttrainingIttraining
40 views37 slides
居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班 by
居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班
居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班IttrainingIttraining
43 views32 slides
AI Technology & Development of Civilization by
AI Technology & Development of CivilizationAI Technology & Development of Civilization
AI Technology & Development of Civilizationunclebrown017
44 views74 slides
Hacking Facebook for fun and profit by Pranav Hivarekar by
Hacking Facebook for fun and profit by Pranav HivarekarHacking Facebook for fun and profit by Pranav Hivarekar
Hacking Facebook for fun and profit by Pranav HivarekarPranav Hivarekar
6 views69 slides
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式 by
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式Shengyou Fan
151 views54 slides

Recently uploaded(6)

AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班 by IttrainingIttraining
AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班
AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班
商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班 by IttrainingIttraining
商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班
商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班
居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班 by IttrainingIttraining
居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班
居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班
AI Technology & Development of Civilization by unclebrown017
AI Technology & Development of CivilizationAI Technology & Development of Civilization
AI Technology & Development of Civilization
unclebrown01744 views
Hacking Facebook for fun and profit by Pranav Hivarekar by Pranav Hivarekar
Hacking Facebook for fun and profit by Pranav HivarekarHacking Facebook for fun and profit by Pranav Hivarekar
Hacking Facebook for fun and profit by Pranav Hivarekar
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式 by Shengyou Fan
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
Shengyou Fan151 views

ncuma_串列.pptx

  • 1. 串 列 簡要 python 學習講義
  • 2. 串列 : list  由排成一列的元素組成 2 a = [ 1 , 2 , 3 , 4 ] # 四個元素 b = [ 8.3 ] # 一個元素 c = [ 2 , ”cat” , 3.4 ] # 串列元素可以不同型別 d = [ [ 1 , 2 ] , 3+2j ] # 串列元素也可以為串列 e = [] # 空串列  串列長度: len() a = len([9,4]) # a 為 2 b = [ [8,5,6] , ”dog” ] c = len(b) # c 為 2  同時設定數個串列 >>> a , b = [5,7] , [”cat”,”ox”] # a = [5,7] , b = ["cat","ox"] # 混合型別設定 >>> c , d , e = [3] , 87 , ”ox” # c = [3] , d = 87 , e = "ox" 國立中央大學數學系
  • 3. 串列下標 : 取出單一元素  串列元素可用下標取得 3 a = [ 9 , ”中央” , ”math” , 2.5 , [2,8] ] a 9 ”中央” ”math” 2.5 [2,8] 正向下標 正向元素 0 1 2 3 4 a[0] a[1] a[2] a[3] a[4] 逆向下標 逆向元素 -5 -4 -3 -2 -1 a[-5] a[-4] a[-3] a[-2] a[-1]  二維串列:串列元素為串列 >>> b = [ [1,2] , [9,4,5] ] >>> c = b[0][1] # c = 2 >>> d = b[1][0] # d = 9 >>> e = len(b) # e = 2 >>> f = len(b[1]) # f = 3 國立中央大學數學系
  • 4. 下標範圍 (一): 取出多個元素  如果 a 為一串列 4  a[i:j] : a[i] , a[i+1] , a[i+2] , … , a[j-1]  a[i:] : a[i] , a[i+1] , a[i+2] , … , a[-1]  a[-i:] : a[-i] , a[-i+1] , a[-i+2] , ... a[-1]  a[:j] : a[0] , a[1] , a[2] , … , a[j-1]  a[i:j:k] : a[i] , a[i+k] , a[i+2k] , … , 末尾元素下標小於 j  a[i:j:-k]: a[i] , a[i-k] , a[i-2k] , ... , 末尾元素下標大於 j  a[:] : a[0] , a[1] , a[2] , … , a[-1] 全部元素  a[::-1] : a[-1] , a[-2] , a[-3] , … , a[0] 逆向取全部元素 國立中央大學數學系
  • 5. 下標範圍 (二) 5 a[2:] [4,7,8] 第三個元素之後 a[-2:] [7,8] 末兩個元素 a[:3] [9,3,4] 前三個元素 a[1:-1:2] [3,7] a[:] [9,3,4,7,8] 全部元素 a[::-1] [8,7,4,3,9] 逆向取元素 a[::-2] [8,4,9] a[1:-1] [3,4,7] 去除頭尾的元素 a[-2:0:-1] [7,4,3] 逆向取中間元素 a[:3][::-1] [4,3,9] 取前三個元素,再逆向 a[-3:][::-1] [8,7,4] 取後三個元素,再逆向  範例 : a [9,3,4,7,8] 原串列 國立中央大學數學系
  • 6. 更動元素 (一)  更改單一元素 6 a = [ 9 , ’中央’ , ’math’ , 2.5 , [ 2 , 8 ] ] 動作 a a[2] = ’數學’ [9, ’中央’, ’數學’, 2.5, [2, 8]] a[-1] = [] [9, ’中央’, ’數學’, 2.5, []] 國立中央大學數學系
  • 7. 更動元素 (二)  更改部份元素 7 >>> a[:2] = [ ’ncu’ ] # 將前兩個元素更改為 ’ncu’ >>> a [’ncu’, ’math’, 2.5, [2, 8]] >>> a[-2:] = [] # 去除末兩個元素 >>> a [’ncu’, ’math’] 僅能更改正向緊鄰的元素: >>> a = [1,2,3,4,5] >>> a[::2] = [10,20] # 錯誤 >>> a[::-1] = [10,20] # 錯誤 >>> a[::1] = 10 # 錯誤,缺中括號 >>> a[::1] = [20,30] # a 變成 [1,20,30,4,5] >>> a[:] = [10,20] # a 變成 [10,20] 國立中央大學數學系
  • 8. 更動元素 (三)  末端加元素或串列 8 也可使用 append 函式 >>> a = [1,2] >>> a += [3] # a = [1,2,3] >>> a = a + [4,5] # a = [1,2,3,4,5] >>> a[len(a):] = [6] # a = [1,2,3,4,5,6] >>> a[len(a):] = [7,8] # a = [1,2,3,4,5,6,7,8] >>> a = [1,2] >>> a.append(3) # a = [1,2,3] >>> a.append([4,5]) # a = [1,2,3,[4,5]] 國立中央大學數學系
  • 9. for 迴圈與串列 (一)  一維串列 使用下標:透過 len 取得串列長度 直接取得元素 9 a = [ 5 , 8 , 7 ] for i in range( len(a) ) : print( a[i] ) # 印出 5 8 7 三列 a = [ 5 , 8 , 7 ] for x in a : # 迴圈每次由 a 取元素為 x print( x ) # 輸出同上 國立中央大學數學系
  • 10. for 迴圈與串列 (二)  二維串列 使用下標:透過 len 取得串列長度 10 b = [ [1] , [8, 2] , [6, 4, 3] ] for i in range( len(b) ) : # len(b) 為串列 b 長度 for j in range( len(b[i]) ) : # len(b[i]) 為串列 b[i] 長度 print( b[i][j] , end=" " ) print() 輸出: 1 8 2 6 4 3 國立中央大學數學系
  • 11. for 迴圈與串列 (三)  二維串列 直接取得元素 11 b = [ [1] , [8, 2] , [6, 4, 3] ] for p in b : # 串列 p 依次為 [1], [8,2], [6,4,3] for x in p : # 每次由 p 取元素存為 x (整數) print( x , end=" " ) print() # 輸出同上 for p in [ [1] , [8,2] , [6,4,3] ] # 串列 p 依次為 [1], [8,2], [6,4,3] for x in p : print( x , end=" " ) print() # 輸出同上 國立中央大學數學系  串列可直接置於 in 之後:
  • 12. a in A 與 a not in A : a 是否(不)在 A 串列內  a in A : 檢查 a 是否在 A 串列內,回傳真假值  a not in A : 檢查 a 是否不在 A 串列內,回傳真假值  列印數字不重複的三位數,輸出十個數字一列: 12 c = 0 for x in range(1,10): for y in range(0,10): if x == y : continue for z in range(0,10): if z in [x,y] : continue c += 1 print( x*100+y*10+z , end=(” ” if c%10 else ”n”) ) 102 103 104 105 106 107 108 109 120 123 124 125 126 127 128 129 130 132 134 135 136 137 138 139 140 142 143 145 146 147 148 149 150 152 153 154 156 157 158 159 ... 國立中央大學數學系
  • 13. 串列初始值設定 (一): list comprehension  基本型式 13 >>> [ x for x in range(4) ] # x 為參數,可為其他有效變數名稱 [0, 1, 2, 3] >>> [ t*t for t in [1,2,3] ] [1, 4, 9] >>> [ t//2+1 for t in range(10) ] [1, 1, 2, 2, 3, 3, 4, 4, 5, 5] >>> [ [x,x*x] for x in range(3) ] # 二維串列:串列元素為串列 [[0, 0], [1, 1], [2, 4]] 國立中央大學數學系
  • 14. 串列初始值設定 (二)  有條件式的設定 14  多重迴圈設定 >>> [ x for x in range(10) if x not in [3,4,5] ] [0, 1, 2, 6, 7, 8, 9] >>> [ x for x in range(10) if x not in range(3,6) ] [0, 1, 2, 6, 7, 8, 9] >>> [ [x,x*x] for x in range(4) if x%2 ] [[1, 1], [3, 9]] >>> [ x+y for x in range(3) for y in range(2) ] [0, 1, 1, 2, 2, 3] >>> [ [x,y] for x in range(3) for y in range(10,12) ] [[0, 10], [0, 11], [1, 10], [1, 11], [2, 10], [2, 11]] 國立中央大學數學系
  • 15. 串列合成與複製  合成串列 : + 15  元素複製 : *  合併使用 + 與 * a = [1,2,3] + [4,5] # a = [1,2,3,4,5] a = [0] * 5 # a = [0,0,0,0,0] b = [1,2] * 3 # b = [1,2,1,2,1,2] c = [1]*2 + [2]*3 # c = [1,1,2,2,2] 國立中央大學數學系
  • 16. 乘法複製陷阱  陷阱:以乘法複製串列,元素都佔用同個空間,這種現象 很容易造成二維串列元素處理上的疏忽 16 >>> a = [3,4] >>> b = [a]*2 # b = [[3, 4],[3, 4]] >>> a[1] = 8 # 設定 a[1] = 8 >>> b # b 的對應位置也變成 8 !!! [[3, 8], [3, 8]]  正確方式:使用 [:] 複製元素,元素各自獨立 >>> a = [1,2] >>> c = [ a[:] for x in range(2) ] >>> c[0][0] = 3 >>> c [[3, 2], [1, 2]]  若 c = [a[:]]*2 ,設定 c[0][0] = 3 ,則 c = [[3, 2], [3, 2]] 國立中央大學數學系
  • 17. 設定一到三維串列 (一)  一維串列 17  None 為 python 常數,代表數值尚未設定 a = [ 1 ] * 3 # a = [1, 1, 1] b = [ None ] * 3 # b = [None, None, None] 國立中央大學數學系
  • 18. 設定一到三維串列 (二) 18  二維串列 設定 3x2 二維串列 >>> c = [ [None]*2 for x in range(3) ] >>> c [[None, None], [None, None], [None, None]] 設定列元素數量遞增的二維串列 >>> d = [[None]*(i+1) for i in range(3) ] >>> d [[None], [None, None], [None, None, None]] 國立中央大學數學系
  • 19. for 迴圈與一維串列 19  for 迴圈內變數可直接取用串列元素 s = 0 for x in [1,4,9,16,25] : s += x # 計算串列元素和 s = 0 for x in [ i*i for i in range(1,6) ] : # 同上 s += x 國立中央大學數學系
  • 20. 20 for 迴圈與二維串列  各別串列元素分別設定到 x 與 y  各別串列元素設定為 p 串列 for x , y in [ [1,2] , [4,5] ] : print( x , ’+’ , y , ’=’ , x+y ) 輸出 : 1 + 2 = 3 4 + 5 = 9 for p in [ [1,2] , [4,5] ] : print( p[0] , ’+’ , p[1] , ’=’ , p[0]+p[1] ) 輸出同上 國立中央大學數學系
  • 21. 字串分解成字元串列  使用 list 分解字串 21 >>> list( "abc" ) [’a’, ’b’, ’c’] >>> list( "123" ) [’1’, ’2’, ’3’]  分解數字成數字串列 >>> n = 423 >>> a = [ int(x) for x in list(str(n)) ] # a = [4, 2, 3] # 以上 list 可省略 >>> b = [ int(x) for x in str(n) ] # b = [4, 2, 3] >>> s = 0 >>> for x in ”423” : s += int(x) # 字串的各數字相加 >>> print(s) # 印出 9 國立中央大學數學系
  • 22. tuple : 常串列 (一)  tuple 為元素一旦設定後即不可更動的串列  使用小括號 22 >>> a = (1,2,3) # a 有三個元素,小括號可省略 >>> a[0] = 5 # 錯誤,不可更動 >>> b = ( 3,4 )*2 # b = (3, 4, 3, 4) >>> c = () # 空 tuple 國立中央大學數學系
  • 23. tuple : 常串列 (二) 23  一個元素的常串列需加逗點 >>> d = ( 5, ) # d 為常串列,僅有一個元素 5 >>> d (5,) >>> e = ( 5 ) # e 為整數 5,不是常串列 >>> e 5 >>> f = () # f 為空常串列 >>> f () 國立中央大學數學系
  • 24. tuple 與 list 型別互換  使用 tuple 與 list 互換型別 24 >>> a = [ 3 ] >>> b = tuple(a) # b = (3,) >>> c = (5,4,3) >>> d = list(c) # d = [5, 4, 3] 國立中央大學數學系
  • 25. 星號式子 (一) : 用於串列物件  用來合併多個元素成為串列或者是拆解串列成個別元素  在等號左側 : 合併(打包)元素為串列 25 5 串列(二)  等號左側僅能有一個星號式子 函式參數設定 運算結果 說明 ( a , *b ) = (1,2,3,4) a = 1 , b = [2,3,4] 小括號可省略 *a , b , c = [1,2,3,4] a = [1,2] b = 3 , c = 4 *a , b = 1 錯誤 右式不是常串列,缺逗號 a , *b = 1 , a = 1 , b = [] *a , b = 1 , a = [] , b = 1 *a = 1 , 2 , 3 錯誤 左式不是常串列,缺逗號 *a , = 1 , 2 , 3 a = [1,2,3] *a , = () a = [] a = 1 , 2 , 3 a = (1,2,3) 此為設定常串列 a = [ 1 , 2 , 3 ] a = [1,2,3] 此為設定串列
  • 26. 星號式子 (二)  在等號右側 : 拆解串列成元素 26 函式參考設定 運算結果 說明 x = [4,5] ( a , b , c ) = ( 3 , *x ) a = 3 b = 4 , c = 5 小括號可省略 x = [1,2] a , b = *x , a = 1 b = 2 末尾逗號不可省略 x = [1,2] a , b , c = *x , 錯誤 等號左側多一個變數 x = [1,2,3] , y = [4] a , b , c , d = *x , *y a = 1 , b = 2 c = 3 , d = 4 等號右側可有多個 星號用來拆解串列 國立中央大學數學系
  • 27. sum 求和函式 >>> sum( [1, 3, 7] ) # 需為串列或常串列 11 >>> sum( (1, 3, 7) + (4, 2) ) # 先合成兩常串列後求和 17 27  計算串列的數字和 國立中央大學數學系
  • 28. max , min 求最大值與最小值  找出串列的極值 28 >>> max( (2, 9, 7) ) 9 >>> min( [4, 2, 8, 9] ) 2 國立中央大學數學系
  • 29. lambda 函式: 設定僅有單一式子的匿名函式  使用 lambda 定義匿名函式 以上 lambda 函式設定等同  多個參數的 lambda 函式 29 import math fn = lambda x : int(math.sqrt(x)*10) # 定義 fn 為 lambda 函式 for s in range(1,100) : print( fn(s) ) def fn( x ) : # 詳見第九章函式 return int(math.sqrt(x)*10) >>> f = lambda y , m , d : "{}-{:0>2}-{:0>2}".format(y,m,d) >>> print( f(2018,9,1) ) 2018-09-01 >>> g = lambda s , t : ( s , t , s+t ) >>> g(1,2) (1, 2, 3) 國立中央大學數學系  lambda 函式僅能有一個式子