Python 語言 講義  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 A B C


串列、序對、集合、字典



符號
有順序
可改變內容
可重覆

串列, list
[ ... ]




序對, tuple
( ... )

不可


集合, set
{ ... }


不可

字典, dict
{ ... }


不可

P.S. 前3者的每一個元素的資料型別可以不同


串列( list ) - 基本運用

import random
lt1=[1,2,3,4]
print(lt1)
lt1=list(range(1,10,3))
print(lt1)
print('length: ',len(lt1))
print('max: ',max(lt1))
print('min: ',min(lt1))
print('sum: ',sum(lt1))
print('average: ',sum(lt1)/len(lt1))
random.shuffle(lt1)
print(lt1)
lt1 =  lt1 + [2,4,6]
print("lt1 : ",lt1)
lt2 = [1,2,3]*3
print("lt2 : ",lt2)
print("lt1 > lt2: ",lt1 > lt2)
print("7 in lt1 : ",7 in lt1)
print("7 not in lt2 : ",7 not in lt2)
print(lt2[2])
print(lt1[:4])
print(lt1[2:])
print(lt1[2:4])      
for i in lt2:
 print(i+2, end=' ')

儲存串列( list )

儲存串列 - 利用range( )

內建函數-顯示串列的元素個數
內建函數-顯示串列的最大元素
內建函數-顯示串列的最小元素個數
內建函數-顯示串列的元素總和
利用random的shuffle來打亂串列的內容(必須先import random)

+ 連接運算子

* 重覆運算子

六種比較運算子
檢查元素是否串列中
檢查元素是否不在串列中
索引運算子
片斷運算子


串列可做為迭代的物件


串列( list ) - 處理方法

lt1=[1,2,3,4]
lt2=[2,3,4]
lt1.append(5)
print(lt1)
#lt1.append(lt2) 是錯的寫法
lt1.extend(lt2)
print(lt1)
lt1.insert(2,9)
print(lt1)
lt1.remove(4)
print(lt1)
x=lt1.pop()
print(lt1, " pop : ", x)
x=lt1.pop(2)
print(lt1, " pop : ", x)
print(lt1.index(5))
print(lt1.count(3))
lt1.sort()
print(lt1)
lt1.reverse()
print(lt1)
lt2=lt1.copy()
print("lt2也是", lt2)
lt2.clear()
print(lt2)
儲存串列( list )

在串列後附加1個元素


在串列後附加1個串列

在串列索引值2的元素後插入元素9

將串列中第1個元素值為4的移除

將串列最後1個元素彈出

將串列索引值2的元素彈出

顯示串列中第1個元素值為5的索引值
計算串列中元素值為3的個數
將串列由小到大排序

反轉串列中的元素順序

拷貝

清空串列內容




串列( list ) - 解析

lt1 = [ i for i in range(1,6)]
print(lt1)
lt1 = [ 2*i for i in range(1,6)]
print(lt1)
lt2 = [ i for i in range(1,22) if i % 3 == 0]
print(lt2)
lt3 = [ i-9 for i in lt2 ]
print(lt3)
lt4 = [ abs(i) for i in lt3]
print(lt4)

可以使用for ... in range(...)

還可以加上運算式

還可以加上選擇敘述



還可以加上先前介紹過的函數


串列( list ) - 刪除

lt1=[1,2,3,4]*3
print(lt1)
del lt1[0]
print(lt1)
del lt1[1:4]
print(lt1)
del lt1



將串列索引值0的元素刪除

將串列索引值1~3的元素刪除

將串列lt1刪除(釋放空間)




二維串列( list ) - 解析

假設有4個學生, 每人有國、英、數3科分數, 如下:

國文
英文
數學
學生1
93
99
95
學生2 80
90
77
學生3 66
76
62
學生4 96
72
84


st=[[93,99,95],[80,90,77],[66,76,62],[96,72,84]]
print(st)
print("\t國文\t英文\t數學")
for i in range(0,4):
 print("學生",i+1,end='\t')
 for j in range(0,3):
  print(st[i][j],end='\t')
 print()
for i in range(0,4):
 print("第",i+1,"個學生的總分:",sum(st[i]))


直接把二維串列輸出
這6行把上述表格輸出










序對( tuple ) - 除了符號外, 其他用法大致與串列相同

不同之處:
1. 使用符號 ( )
2. 不可使用shuffle( ) 函數 (因為會改變內容)



集合( set ) - 除了符號外, 其他用法大致與串列相同

不同之處:
1. 使用符號 { }
2. 不可使用shuffle( ) 、和一些函數都無法使用 (但有新的可用)

集合( set ) - 基本運用

st1={} # 是錯的, 會建空的字典
st1=set()
print(st1)
st1={1,5,3}
print("st1: ",st1)
st2=set([2*i for i in range(1,6)])
print("st2: ",st2)
print(len(st2))
print(max(st2))
print(min(st2))
print(sum(st2))
# st3 = st1 + st2 不支援 +連接
# st3 = {1,5,3}*3 不支援 *重覆

print("7 in st1 : ",7 in st1)
print("7 not in st2 : ",7 not in st2)
# print(st2[2]) 不支援 []索引與片斷

儲存空集合

儲存集合

儲存集合 - 利用for 和 range( )

內建函數-顯示集合的元素個數
內建函數-顯示集合的最大元素
內建函數-顯示集合的最小元素個數
內建函數-顯示集合的元素總和
不支援 + 連接運算子
不支援 * 重覆運算子
不支援 六種比較運算子
檢查元素是否集合中
檢查元素是否不在集合中
不支援  索引運算子
不支援  片斷運算子


集合( set ) - 處理方法

st1={1,2,3,4}
st1.add(9)
print(st1)
st1.remove(4)
print(st1)
x=st1.pop()
print(st1, " pop : ", x)
x=st1.pop()
print(st1, " pop : ", x)
# x=st1.pop(2) 是錯的寫法
st2=st1.copy()
print("ls2也是", st2)
st2.clear()
print(st2)
儲存 集合
在 集合後附加1個元素

將 集合中元素值為4的移除

將 集合中第1個元素彈出

將 集合中第1個元素彈出


拷貝

清空 集合內容

集合( set ) - 2個集合的運算方法

st1={1,2,3,4,5}
st2={4,5,6,7}
st3={3,4,5}
print("st1: ",st1)
print("st2: ",st2)
print("st3: ",st3)
print("st2是st1的子集合: ",st2.issubset(st1))
print("st3是st1的子集合: ",st3.issubset(st1))
print("st1是st3的超集合: ",st1.issuperset(st3))
print("st2是st3的超集合: ",st2.issuperset(st3))
print("st1與st2是互斥的: ",st1.isdisjoint(st2))
print("st1與st2的聯集: ",st1.union(st2))
st4={5,8}
print("st4: ",st4)
st4.update(st3)
print("st4聯集st3後更新為: ",st4)
print("st1與st2的交集: ",st1.intersection(st2))
st5={5,8}
print("st5: ",st5)
st5.intersection_update(st3)
print("st5交集st3後更新為: ",st5)
print("st1差集st2: ", st1.difference(st2))
print("st2差集st1: ", st2.difference(st1))
st5={5,8}
print("st5: ",st5)
st5.difference_update(st3)
print("st5差集st3後更新為: ",st5)
print("st1與st2的對稱差集: ", st1.symmetric_difference(st2))
# st5.symmetric_difference_update(st3) #為對稱差集後更新
左邊程式的執行結果


st1:  {1, 2, 3, 4, 5}
st2:  {4, 5, 6, 7}
st3:  {3, 4, 5}
st2是st1的子集合:  False
st3是st1的子集合:  True
st1是st3的超集合:  True
st2是st3的超集合:  False
st1與st2是互斥的:  False
st1與st2的聯集:  {1, 2, 3, 4, 5, 6, 7}

st4:  {8, 5}

st4聯集st3後更新為:  {3, 4, 5, 8}
st1與st2的交集:  {4, 5}

st5:  {8, 5}

st5交集st3後更新為:  {5}
st1差集st2:  {1, 2, 3}
st2差集st1:  {6, 7}

st5:  {8, 5}

st5差集st3後更新為:  {8}
st1與st2的對稱差集:  {1, 2, 3, 6, 7}




字典( dict ) - {鍵1:值1, 鍵2:值2, 鍵3:值3, ...} 是資料庫Key的對映

字典( dict )  - 基本運用

name={1:"Tom", 2:"Helen", 3:"Axe"}
eng={1:90,2:66,3:80}
print(name)
print(eng)
print("號碼: ",1," , ",name[1],"的英文是",eng[1])
print("號碼: ",2," , ",name[2],"的英文是",eng[2])
name[2]="Marry"
del name[3]
del eng[3]
print(name)
print(eng)
print("班上有 ",len(name), "人")


# print("班上有Tom ?","Tom" in name) #是錯的
print("班上有1號 ?",1 in name)
print("班上沒有4號 ?",4 not in name)
print("字典name == eng:",name == eng)
儲存字典
儲存字典


以key 來索引出 值

以key 來索引修改
以key 來索引刪除 鍵:值



內建函數-顯示字典的元素個數
不支援 + 連接運算子 與  * 重覆運算子
不支援 六種比較運算子

檢查元素是否集合中
檢查元素是否不在集合中
比較2個字典是否相同


字典( dict ) - 處理方法

name={1:"Tom", 2:"Helen", 3:"Axe"}
print(name)
print(name.get(3))
x=name.pop(2)
print("name pop(2)得到 ", x, ", 而name剩下 ",name)
name={1:"Tom", 2:"Helen", 3:"Axe"}
x=name.popitem()
print("name 隨機pop得到 ", x, ", 而name剩下 ",name)
print("name 中的所有的鍵: ",name.keys())
print("name 中的所有的值: ",name.values())
print("name 中的所有的鍵值: ",name.items())
name2 = name.copy()
print("name2 拷貝了name: ",name2)
name2.clear()
print("name2 清空了: ",name2)
name2.update(name)
print("name2 以name來更新了: ",name2)
儲存 字典

取得key 為3的值
將 字典中key=2的值彈出


將 字典中隨機彈出1組鍵值

字典中的所有的鍵
字典中的所有的值
字典中的所有的鍵值
拷貝字典

清空字典

更新字典



Python 語言 講義  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 A B C