---
# System prepended metadata

title: wk07_1019 串列與元組
tags: [python]

---

{%hackmd @themes/orangeheart %}
## wk07_1019_串列與元組 
### 醫放三 B1003210 應雨岑

CH6 
1. 串列的使用
2. 使用 for迴圈讀取串列
3. 串列搜尋與計次
4. 串列元素新增與刪除
5. 串列排序
6. 串列常用的方法列表
7. 元組(Tuple)

## 今日課程內容
<pre>
1. list串列的使用:可以提供儲存資料的記憶體空間(or稱清單、列表)
2. 元組(Tuple)
</pre>
## NOTE
<pre>
串列名稱=[1,2,3,...]  #可以放字串、數字等等的
另外也可以宣告空的串列list=[]
多為變數的宣告
    list=[["1"],["1,2"],["1,2,3"]]
    如果想要顯示第二個串列的第一個內容:print(list[1][0]))    
    # 0表示第一個資料，1表示第二個-意思是程式計算的方式是由0開始數
若想檢索特定的元素可以使用list[起始索引,終止索引,間隔]的方式進行
也可以索引-值，表示從最後一個開始數list[-1]
len(list)可以計算元素數量
max(list)可以找到元素內最大值
list.index(...)可以找...在清單中第幾個
    .count     可以數...出現幾次
    .append    插入一個元素在最後
    .insert(3,8)插入8某一個位置(第三個)
    .pop       移除最後一個元素
    
</pre>
## [ INCLASS PRACTICE ]
* 1. 串列出值設定
```python
list1=[]
list2=["蘋果","草莓","櫻桃"]
list3=[["法國","澳洲","瑞士"],["羽球","桌球","排球"]]

print(list1)
print(list2)
print(list3)
print("我想要去旅遊的國家有",list3[0])
print("其中最想要去旅遊的國家是",list3[0][0])
print("另外我今天會去打",list3[1][2])

print(list2[0:2:1])
```

    []
    ['蘋果', '草莓', '櫻桃']
    [['法國', '澳洲', '瑞士'], ['羽球', '桌球', '排球']]
    我想要去旅遊的國家有 ['法國', '澳洲', '瑞士']
    其中最想要去旅遊的國家是 法國
    另外我今天會去打 排球
    ['蘋果', '草莓']
    
* 1. 串列出值設定-2
```python
list2=["蘋果","草莓","櫻桃"]

list2.append("香蕉")  #增加一個元素在串列裡
print(list2)

list2.pop()    #括號內沒有內容就是刪掉最後一個
print(list2)

list2.pop(0)   #pop(0)就是刪掉第一個
print(list2)

list2[1]= "西瓜"  #把第二個取代成西瓜(櫻桃->西瓜)
print(list2)

list2.insert(0,"楊桃")  #把第一個位置插入楊桃
print(list2)

list2.remove("西瓜")  #把西瓜移除掉
print(list2)
```

    ['蘋果', '草莓', '櫻桃', '香蕉']
    ['蘋果', '草莓', '櫻桃']
    ['草莓', '櫻桃']
    ['草莓', '西瓜']
    ['楊桃', '草莓', '西瓜']
    ['楊桃', '草莓']
    


```python
list2.pop()    #括號內沒有內容就是刪掉最後一個
print(list2)
```

    ['蘋果', '草莓', '櫻桃']
    


```python
#1. 串列出值設定
list4=[100,89,79]
print(max(list4))
print(min(list4))
print(len(list4))    #元素數有幾個
print(list4.count(79))
print(list4.index(79))
```

    100
    79
    3
    1
    2
    
* 2. 使用 for 迴圈讀取串列元素

```python
print(list4)

for n in list4:
    print(n*3,end=" ")     #結束的方式是用 鍵，沒有特別指定時是換行
```

    [100, 89, 79]
    300 267 237 0,100
    1,89
    2,79
    


```python
for i in range(len(list4)):
    print(i,list4[i],sep=",")
print("---")
for j in range(len(list2)):
    print(j,list2[j],sep=",")
    
```

    0,100
    1,89
    2,79
    ---
    0,楊桃
    1,草莓
    

* 4.  以串列計算班級成績 
```python
score=[100,90,50,70,100,100,90,90,60,30]
total=0
average=0
n=0

for score in score:
    total=total+score
    n=n+1
average=total/n

print("總成績為%3.f,平均為%5.2f" % (total,average))
```

    總成績為780,平均為78.00
    
* 4.  以串列計算班級成績-2

```python
score=[100,90,50,70,100,100,90,90,60,30]
total=0
average=0
n=len(score)   #直接知道串列裡面有多少個數字，就不用自己在那邊數了

for scores in score:
    total=total+scores
    #n=n+1
average=total/n

print("總成績為%3.f,平均為%5.2f" % (total,average))
```

    總成績為780,平均為78.00
    


```python
score=[]
inscore=0
while(inscore!=-1):
    inscore=int(input("請輸入成績(輸入好一個數字後就按enter,如果不輸入就按-1)"))
    if(inscore!=-1):
        score.append(inscore)
print(score)

ttl=0
avg=0
n=len(score)
for i in score:
    ttl=ttl+i
avg=ttl/n
print("總成績為%3.f,平均為%5.2f" % (ttl,avg))



```

    請輸入成績(輸入好一個數字後就按enter,如果不輸入就按-1)100
    請輸入成績(輸入好一個數字後就按enter,如果不輸入就按-1)90
    請輸入成績(輸入好一個數字後就按enter,如果不輸入就按-1)80
    請輸入成績(輸入好一個數字後就按enter,如果不輸入就按-1)-1
    [100, 90, 80]
    總成績為270,平均為90.00
    

* 5.  刪除指定串列元素
```python
fruits=["櫻桃","葡萄","楊桃","香蕉","酪梨","西瓜","龍眼"]
to_del="西瓜"

print(fruits)
```

    ['櫻桃', '葡萄', '楊桃', '香蕉', '酪梨', '西瓜', '龍眼']
    

## 全部的note
<pre>

計算符號之間可以加空白鍵 <br>
** : 幾次方<br>
sep="." : 分隔符號為.
end="/" : 結束用/結束

在print內寫入%d : 放入參數答案  (最後在答案要加%)
            %s : 放入的答案為字串
            %f : 放入的答案包含全部小數點
            %.1f :        包含 1位小數點
            %.3f :        包含 3位小數點
寫法如下- print("身高為%d cm，體重為%d kg，BMI為%.1f " % (height,weight,bmi))
                
    
print("顯示的文字",參數名字)<br>
my_height = input("請輸入身高(cm)") : 可以輸入文字進去對話框
使用者輸入的文字要轉換成"int"  ()<br>

print("姓名  成績")
print("%3s %3d"%(name1,score1))   #按照字元數進行規則排列出一格表格格式

**次方
//整除的數
/除以
%餘數
and 放在兩個運算子中間，判斷True or False，當兩個都為True才會是True
or 放在兩個運算子中間，判斷True or False，當兩個都為False才會是False

if,else,elif需使用冒號:還有縮排來寫code
.upper可以讓程式不用判斷大小寫

串列list用中括弧括起來
for和其他語法一樣，他同樣也是需要用到:還有縮排來寫程式

break會跳出這個迴圈
continue跳出執行這個code 繼續執行下一個i的程式
None 為一個什麼都沒有的數字，但是他可以做加減乘除的運算

</pre>

## [ afterclass practice ]

> 1. 綜合演練 選擇題1-10  (需抄題在markdown cell ; 有程式碼的題目要有code cell )
> 2. 教學影音 lesson 8
* ## 綜合演練
### ( B ) 1. 執行下列程式，下列結果何者正確？

list1 = [1, 2, 3, 4, 5]

print(list1[0])

(A) 0 (B) 1 (C) 2 (D) [1, 2, 3, 4,5]

#### 因為會列印出list1串列中第一個值(程式判別第一個是從0開始數)


```python
list1 = [1, 2, 3, 4, 5]

print(list1[0])
```

    1
    

### ( A ) 2. 執行下列程式，下列結果何者正確？

list4 = ["香蕉", "蘋果", "橘子"]

print(list4[-3])

(A) 香蕉 (B) 蘋果 (C) 橘子 (D) 錯誤，索引值超過範圍

#### 因為引索值若為-的，則會從最後一個數開始數，因此-3是倒數第三個


```python
list4 = ["香蕉", "蘋果", "橘子"]

print(list4[-3])
```

    香蕉
    

### ( D ) 3. 執行下列程式，n 的值為多少？

scores = [85, 79, 93]

n=len(scores)

(A) 0 (B) 1 (C) 2 (D)3

#### 因為len表示串列內的元素數，而裡面有三個


```python
scores = [85, 79, 93]

n=len(scores)
print(n)
```

    3
    

### ( B ) 4. 執行下列程式，n 的值為多少？

list1 = ["香蕉","蘋果","橘子"]

n = list1.index("蘋果")

(A) 0 (B) 1 (C) 2 (D)3

#### 因為index是搜尋"蘋果"所在的位置，而蘋果在第二個表示為1


```python
list1 = ["香蕉","蘋果","橘子"]

n = list1.index("蘋果")
print(n)
```

    1
    

### ( A ) 5. 執行下列程式，下列結果何者正確？

list1 = ["香蕉","蘋果","橘子"]

n = list1.count("西瓜")

(A) n=0 (B) n=1 (C) n=2 (D) 出現錯誤

#### 因為.count是計算西瓜出現的次數，然而串列中不包含西瓜，因此最終顯示值為0


```python
list1 = ["香蕉","蘋果","橘子"]

n = list1.count("西瓜")
print(n)
```

    0
    

### ( D ) 6. 執行下列程式，下列結果何者正確？

list1 = [1,2,3,4,5,6]

m = list1.pop()

n = list1.pop(2)

(A) m=1, n=6 (B) m=2, n=3 (C) m=6, n=2 (D) m=6, n=3

#### 因為.pop若沒有輸入數字進入時表示是串列中的最後一個，因此m=6，而若立面輸入數字時，則會按照順序數，因此n=3


```python
list1 = [1,2,3,4,5,6]

m = list1.pop()

n = list1.pop(2)

print("m=%d, n=%d" %(m,n))
```

    m=6, n=3
    

### ( C ) 7. 執行下列程式，下列顯示結果何者正確？

list1 = [1,2,3,4,5,6]

list1.insert(-1, "愛")

list1.insert(12, "台灣")

print(list1[5])

(A) -1 (B) 12 (C) 愛 (D)台灣

#### 因為.insert(-1)時，"愛"會插入再從後面數過來的第一個空格，再輸入.insert(12)時，"台灣"就會放在第12個的位置，因此最終串列為[1, 2, 3, 4, 5, '愛', 6, '台灣']，而系統判定5則為第六個:愛


```python
list1 = [1,2,3,4,5,6]

list1.insert(-1, "愛")
print(list1)
list1.insert(12, "台灣")
print(list1)

print(list1[5])
```

    [1, 2, 3, 4, 5, '愛', 6]
    [1, 2, 3, 4, 5, '愛', 6, '台灣']
    愛
    

### ( C ) 8. 執行下列程式，下列顯示結果何者正確？

list1 = [1,2,3,4,5,6]

del list1[1]

print(list1)

(A) [1,2,3,4,5,6] (B) [2,3,4,5,6] (C) [1,3,4,5,6]

(D) [1,2,3,4,5]

#### 因為我們把list1[1]也就是第二個數:2給del刪除掉了 


```python
list1 = [1,2,3,4,5,6]

del list1[1]

print(list1)
```

    [1, 3, 4, 5, 6]
    

### ( D ) 9. 執行下列程式，下列顯示結果何者正確？

list1=[3,2,1,5]

list1.reverse()

print(list1)

(A) [3,2,1,5] (B) [1,2,3,5] (C) [5,3,2,1] (D) [5,1,2,3]

#### 因為.reverse會把整個串列做顛倒，因此[3,2,1,5]的顛倒就是[5,1,2,3]


```python
list1=[3,2,1,5]

list1.reverse()

print(list1)
```

    [5, 1, 2, 3]
    

### ( C ) 10. 執行下列程式，下列顯示結果何者正確？

list1=[3,2,1,5]

list2=sorted(list1,reverse=True)

print(list2)

(A) [3,2,1,5] (B) [1,2,3,5] (C) [5,3,2,1] (D) [5,1,2,3]

#### 因為我們先讓list1進行按順序sorted的排列(由小到大)，再做顛倒reverse的動作，因此最終得到數據為 [5,3,2,1]


```python
list1=[3,2,1,5]

list2=sorted(list1,reverse=True)

print(list2)
```

    [5, 3, 2, 1]
    

* ## 教學影音 lesson 8
這次的教學影片主要是在介紹關於list清單、串列的使用方式，在list裡面可以放入很多個元素，透過引索的方式還可以找出特定的元素，如list[1:4]就是找清單中第一個、第二個還有第三個的值出來。另外還講到了之前上課介紹的range。

## [ self practice ]

* 刪除指定串列元素1

```python
fruits=["櫻桃","葡萄","楊桃","香蕉","酪梨","西瓜","龍眼"]
a=fruits.count("西瓜")
if a!=0:  #表示有西瓜
    num=fruits.index("西瓜")
    del fruits[num]
    print(fruits)
else:
    print("沒有找到西瓜")

```

    沒有找到西瓜
    
* 刪除指定串列元素2

```python
put=[]
putin=1

while (putin!="0"):
    putin=str(input("請輸入水果，若輸入結束請按0"))
    if (putin!="0"):
        put.append(putin)   
print(put)

no=input("請輸入不要的水果名稱")
b=put.count(no)
if b!=0:
    number=put.index(no)
    del put[number]
    print("刪除%s成功" % no)
    print(put)
else:
    print("沒有找到%s" %no)
```

    請輸入水果，若輸入結束請按0apple
    請輸入水果，若輸入結束請按0banana
    請輸入水果，若輸入結束請按0cherry
    請輸入水果，若輸入結束請按0lemon
    請輸入水果，若輸入結束請按0grava
    請輸入水果，若輸入結束請按0pineapple
    請輸入水果，若輸入結束請按0stawberry
    請輸入水果，若輸入結束請按00
    ['apple', 'banana', 'cherry', 'lemon', 'grava', 'pineapple', 'stawberry']
    請輸入不要的水果名稱banana
    刪除banana成功
    ['apple', 'cherry', 'lemon', 'grava', 'pineapple', 'stawberry']
    
