ncuma_串列.pptx

NCU MCL
NCU MCLSoftware Developer à 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 sur 29

Recommandé

Ppt 51-77 par
Ppt 51-77Ppt 51-77
Ppt 51-77hungchiayang1
2.1K vues27 diapositives
Ppt 51-77 par
Ppt 51-77Ppt 51-77
Ppt 51-77hungchiayang1
122 vues27 diapositives
Ch4 par
Ch4Ch4
Ch4Alisha Smile
330 vues103 diapositives
Ch4 教學 par
Ch4 教學Ch4 教學
Ch4 教學hungchiayang1
1K vues49 diapositives
Ppt 1-25 par
Ppt 1-25Ppt 1-25
Ppt 1-25hungchiayang1
115.1K vues25 diapositives
ncuma_字串.pptx par
ncuma_字串.pptxncuma_字串.pptx
ncuma_字串.pptxNCU MCL
236 vues19 diapositives

Contenu connexe

Similaire à ncuma_串列.pptx

Ch8 教學 par
Ch8 教學Ch8 教學
Ch8 教學hungchiayang1
740 vues34 diapositives
Ppt 1-50 par
Ppt 1-50Ppt 1-50
Ppt 1-50hungchiayang1
1.6K vues50 diapositives
Ch1 教學 par
Ch1 教學Ch1 教學
Ch1 教學hungchiayang1
13.5K vues33 diapositives
ncuma_型別與迴圈.pptx par
ncuma_型別與迴圈.pptxncuma_型別與迴圈.pptx
ncuma_型別與迴圈.pptxNCU MCL
19.5K vues26 diapositives
Ppt 101-119 par
Ppt 101-119Ppt 101-119
Ppt 101-119hungchiayang1
1.4K vues19 diapositives
Ch5 教學 par
Ch5 教學Ch5 教學
Ch5 教學hungchiayang1
1.1K vues50 diapositives

Plus de NCU MCL

函數畫圖_習題4.pptx par
函數畫圖_習題4.pptx函數畫圖_習題4.pptx
函數畫圖_習題4.pptxNCU MCL
229 vues1 diapositive
數值積分法_3.pptx par
數值積分法_3.pptx數值積分法_3.pptx
數值積分法_3.pptxNCU MCL
679 vues1 diapositive
數值積分法_2.pptx par
數值積分法_2.pptx數值積分法_2.pptx
數值積分法_2.pptxNCU MCL
40 vues1 diapositive
數值積分法_1.pptx par
數值積分法_1.pptx數值積分法_1.pptx
數值積分法_1.pptxNCU MCL
46 vues1 diapositive
數值求根習題_1.pptx par
數值求根習題_1.pptx數值求根習題_1.pptx
數值求根習題_1.pptxNCU MCL
82 vues1 diapositive
函數微分習題_3.pptx par
函數微分習題_3.pptx函數微分習題_3.pptx
函數微分習題_3.pptxNCU MCL
526 vues3 diapositives

Plus de NCU MCL(20)

函數畫圖_習題4.pptx par NCU MCL
函數畫圖_習題4.pptx函數畫圖_習題4.pptx
函數畫圖_習題4.pptx
NCU MCL229 vues
數值積分法_3.pptx par NCU MCL
數值積分法_3.pptx數值積分法_3.pptx
數值積分法_3.pptx
NCU MCL679 vues
數值積分法_2.pptx par NCU MCL
數值積分法_2.pptx數值積分法_2.pptx
數值積分法_2.pptx
NCU MCL40 vues
數值積分法_1.pptx par NCU MCL
數值積分法_1.pptx數值積分法_1.pptx
數值積分法_1.pptx
NCU MCL46 vues
數值求根習題_1.pptx par NCU MCL
數值求根習題_1.pptx數值求根習題_1.pptx
數值求根習題_1.pptx
NCU MCL82 vues
函數微分習題_3.pptx par NCU MCL
函數微分習題_3.pptx函數微分習題_3.pptx
函數微分習題_3.pptx
NCU MCL526 vues
SymPy 在微積分上的應用_3.pptx par NCU MCL
SymPy 在微積分上的應用_3.pptxSymPy 在微積分上的應用_3.pptx
SymPy 在微積分上的應用_3.pptx
NCU MCL27 vues
SymPy 在微積分上的應用_2.pptx par NCU MCL
SymPy 在微積分上的應用_2.pptxSymPy 在微積分上的應用_2.pptx
SymPy 在微積分上的應用_2.pptx
NCU MCL26 vues
SymPy 在微積分上的應用_1.pptx par NCU MCL
SymPy 在微積分上的應用_1.pptxSymPy 在微積分上的應用_1.pptx
SymPy 在微積分上的應用_1.pptx
NCU MCL30 vues
極座標畫圖_3.pptx par NCU MCL
極座標畫圖_3.pptx極座標畫圖_3.pptx
極座標畫圖_3.pptx
NCU MCL12 vues
極座標畫圖_2.pptx par NCU MCL
極座標畫圖_2.pptx極座標畫圖_2.pptx
極座標畫圖_2.pptx
NCU MCL15 vues
極座標畫圖_1.pptx par NCU MCL
極座標畫圖_1.pptx極座標畫圖_1.pptx
極座標畫圖_1.pptx
NCU MCL12 vues
Taylor 多項式_3.pptx par NCU MCL
Taylor 多項式_3.pptxTaylor 多項式_3.pptx
Taylor 多項式_3.pptx
NCU MCL7 vues
Taylor 多項式_2.pptx par NCU MCL
Taylor 多項式_2.pptxTaylor 多項式_2.pptx
Taylor 多項式_2.pptx
NCU MCL10 vues
Taylor 多項式_1.pptx par NCU MCL
Taylor 多項式_1.pptxTaylor 多項式_1.pptx
Taylor 多項式_1.pptx
NCU MCL8 vues
微分方程式求解_3.pptx par NCU MCL
微分方程式求解_3.pptx微分方程式求解_3.pptx
微分方程式求解_3.pptx
NCU MCL38 vues
微分方程式求解_2.pptx par NCU MCL
微分方程式求解_2.pptx微分方程式求解_2.pptx
微分方程式求解_2.pptx
NCU MCL28 vues
微分方程式求解_1.pptx par NCU MCL
微分方程式求解_1.pptx微分方程式求解_1.pptx
微分方程式求解_1.pptx
NCU MCL22 vues
牛頓迭代法_3.pptx par NCU MCL
牛頓迭代法_3.pptx牛頓迭代法_3.pptx
牛頓迭代法_3.pptx
NCU MCL18 vues
牛頓迭代法_2.pptx par NCU MCL
牛頓迭代法_2.pptx牛頓迭代法_2.pptx
牛頓迭代法_2.pptx
NCU MCL16 vues

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 函式僅能有一個式子