list 是 python 中最為基礎的一種資料結構,有點類似小時候 c++ 學過的 array (但是又多了少部分功能)
list 的基本宣告
empty_list=[] #空list
integer_list = [1,2,3] #元素同型的list
heterogeneous_list =["penguin",0.1,True] #各種類型都有的list
list_of_list =[interger_list,heterogeneous_list,[]] #list裡面也可以放list喔~
讓我們用下面的圖片簡單開始:
我們可以利用 slice 的功能,從 list 之中擷取一些我們需要的片段。
[i:j]
這個片段表示從 i 到 j-1 的所有元素
誒…那個如果沒有設定開頭i怎麼辦:cold_sweat:
不用緊張~那當然就直接從頭開始取出片段嘍~ :smiley:
順帶一提,我們也可以用設定第三個參數 k 來指定間隔[i:j:k]
表示從 i 開始每隔 k 取出一個元素
再來一段小練習
x=[0,1,2,3,4,5,6,7,8,9]
a=x[-2]
last_three=x[-3:]
without_firstNlast=x[1:-1]
copy=x[:]
every_secon=x[::2]
guessWhat=x[5:2:-1]
跟上面無關但是你們之後解題會用到
利用這種方式可以將list裡面的元素全部轉為整數型態
for i in range(len(List)):
List[i] = int(List[i])
當然還有更酷的,我們可以利用map來轉換list內部元素的型態~
results = ['1','2','3','4']
print(results)
results = list(map(int,results))
print(results)
比較一下結果:
暖身題 (slice):zap:
請問如何利用slice將list進行reversal呢?
敢給我用reverse()給我試試看^^
【樣例輸入】
1 2 3 4 5 6 7
【樣例輸出】
[7, 6, 5, 4, 3, 2, 1]
要怎麼知道list裡面有沒有-1這個元素?
python 裡面的in
可以滿足你的願望~
print(-1 in [1,2,3])
同時,它也可以用來走訪整個列表~
利用關鍵字item的走訪
characters=["五條悟","虎杖悠仁","伏黑惠","釘崎野薔薇"]
for item in characters: #直接輸出item
print(item)
小練習1 (list):zap:
a065 Jumping Mario
:warning: 請用list來實現,output可能有點小問題要注意
基本運算範例(1)
sentence=["重要的事情說三遍"]
x=[1,2,3,'哈摟']
print(sentence*3)
print(x+[5,6])
print(x+sentence)
print(sentence+3)
基本運算範例(2)
sentence2=["他",4,"在幹嘛"]
x2=[1,2,3,'哈摟']
sentence2[2]=x2[2]+84
print(sentence2)
len()
: 可以用來看list的長度str()
: 將list轉為字串sum()
: 計算內部元素和sorted()
: 會回傳排序好的list,但不會動到原本listsort()
: 會直接對內部元素進行排序reversed()
: 反轉listlistname.append(element)
:用於在list尾巴追加元素
listname.extend(seq)
:直接在list尾巴加入另一個list(另一組數字)
listname.count(obj)
: 計算某元素的出現次數
函式範例
penguin_types1=["皇帝企鵝","國王企鵝","跳岩企鵝","阿德利企鵝"]
penguin_types2=["皇帝企鵝","小藍企鵝","麥哲倫企鵝"]
penguin_types1.append("皇帝企鵝")
print(penguin_types1)
penguin_types1.extend(penguin_types2)
print("length of penguin_types1=",len(penguin_types1))
print('penguin_types1=',penguin_types1)
print('皇帝企鵝次數:',penguin_types1.count('皇帝企鵝'))
皇帝企鵝 | 國王企鵝 | 跳岩企鵝 | 阿德利企鵝 |
---|---|---|---|
就是大家以前學的二(多)維陣列不解釋
二維的基本宣告
a=[[1,2,3],[2,3,4]]
:question: 誒那二維空列表要怎麼設定啊?跟下一題超級有關!
請大家看以下面兩種宣告:
c = [[0 for i in range(2)] for j in range(3)]
print(c)
c=[[0]*2]*3
print(c)
如果這時候加入
c[0][0]=77
想一想會發生什麼事情?
小練習2 (二維練習):zap:
完成 3X3 矩陣和 3X2 整數矩陣的乘法,輸出結果矩陣。
範例:
第一個矩陣3X3
3 2 1
5 6 7
2 4 6
第二個矩陣3X2
2 3
3 4
6 2
輸入與輸出格式如下
【樣例輸入】
3 2 1
5 6 7
2 4 6
2 3
3 4
6 2
【樣例輸出】
18 19
70 53
52 34
操作原理大致上和list差不多
用()來建立Tuple
list轉tuple()
EX:tuple([1,2,3])
=>(1,2,3)
tuple 的基本宣告
my_list=[1,2]
my_tuple=(1,2)
other_tuple=3,4 #不加括號其實也可以只是不推薦
print(other_tuple)
my_list[1]=3
print(my_list)
try:
my_tuple[1]=3
except TypeError:
print("tuple內容不能改喇QQ")
tuple 基本運算
tuple1=('minions',7,True,3.15926)
tuple2=(False,20)
print("tuple1[1:]=", tuple1[1:]) #slice基本上跟list一樣
print("tuple2[0]=", tuple2[0])
#雖然不能改變tuple內容,但是仍然可以取其值進行運算
print(tuple1+tuple2)
print(tuple1[1]+3)
print(tuple2*3)
:bulb:如果 function 需要回傳多個數值, 此時 tuple 就會非常方便~
用 tuple 回傳數值
def sumNproduct(a,b):
return (a+b), (a*b)
sp=sumNproduct(2,3) #sp= (5,6)
s,p = sumNproduct(2,3) #s=5 , p=6
len(tuple)
:回傳tuple長度max(tuple)
:回傳tuple中的最大值:bulb: 簡單來說 tuple 跟 list 的操作方式重疊度真的很高~只要不涉及內容刪改, tuple 基本上都可以用, 大家有時間可以玩玩看~^^
小練習3 (tuple):zap:
隨意輸入一串數字,如:nums = [2, 7, 11, 15, 1, 8, 6 ,10]
請找到任意相加為9的元素集合,如:[(2, 7), (1, 8)]
【樣例輸入】
1 2 3 4 5 6 7 8 9 0 10 -1
【樣例輸出】
[(1, 8), (2, 7), (3, 6), (4, 5), (9, 0), (10, -1)]
另一種基本的資料結構,它包含了鍵值( key ) 以及對應的值( value ),讓我們可以快速選出某個key對應的value (我一直不能明白為什麼它叫字典)
我們利用{}來建立Dictionary
dictionary={'key1':'value1','key2':'value2',...,'keyn':'value n'}
dict的基本宣告
empty_dict={} #空字典建立
empty_dict2=dict() #其實也可以但是不推薦
#key 為整數的字典
puipui={1:'馬鈴薯',2:'西羅摩',3:'阿比',4:'泰迪', 5:'巧克力'}
print(puipui)
print(puipui[1])
dict小練習 #key為文字的字典
grades={'Wendy': 98,'Emilia': 82, 'Darren': 70}
darren_grade=grades['Darren']
print("Darren=", darren_grade)
#如果你用了一個不存在的key 就會出現keyError的情況...
try:
howard_grade = grades['Howard']
except KeyError:
print("no grade for Howard ^^")
#可以再次利用 in 確定你的 key 484存在的
darren_has_grade = 'Darren' in grades
print('darren_has_grade:', darren_has_grade)
howard_has_grade = 'Howard' in grades
print('howard_has_grade:', howard_has_grade)
#如果要指定特定的key或是value 請用中括號
grades['Darren'] = 90 #替換掉舊value
grades['Howard'] = 80 #添加新的項目
print(grades)
:bulb: key的值也可以是tuple喔~
NCTU_map = {(0,0):"浩然圖書館",(0,-4):"綜一",(3,0):"管一"}
dict1.update(dict2)
:將一個字典的鍵與值複製到另一個,如果存在鍵相同,則以新傳入的值會蓋掉原本的值dict.get('key')
:回傳字典中該鍵的值dict.keys()
:回傳字典中所有的鍵dict.values()
:回傳字典中所有的值dict.items()
:回傳字典中所有的鍵值對'key' in dict
:確認鍵是否存在字典中,回傳一個布林值del dict['key']
:刪除字典中該鍵與值dict.clear()
:清除字典所有內容小練習4 (dictionary):zap:
讓我們來算算麥當勞餐點的熱量吧~
如果今天選擇只有大麥克、中薯、可樂、一份(四塊)麥克雞塊。請計算餐點熱量。
【呈現方式(截圖)】
小提示:
dict={1:["Big Mac",530], 2:["Fries(Regular)",330],3:["Cola(Regular)",210],4:["McNuggets(4 pieces)", 230]}
number= list(dict.keys())
price = list(dict.values())
count_kcal=0
for i in range(4):
print(str(number[i])+price[i][0])
:point_right:今天的解答