---
# System prepended metadata

title: wk07_1019_list_tuple
tags: [python]

---

## wk07_1019_list_tuple 
- 串列
    1. 使用
    2. 讀取
    3. 搜尋
    4. 新增/刪除
    5. 排序
    6. 常用方法
- 元組


## 【inclass practice】
串列
- 提供儲存資料的記憶體空間
- 元素置於[]中括弧之間，以逗號分開
- 各元素資料型態可以相同，也可以不同
- 空串列 / 多維串列
- 串列操作
    - 創建(宣告)串列
    - 讀取元素
    - 修改元素
    - 刪除元素
    - 新增元素
    - 排序
    - 搜尋

### {概念複習}

### {綜合演練}
#### 實作2
輸入喜歡的水果，直到Enter鍵結束，找尋fruit = ["香蕉","蘋果","橘子","鳳梨","西瓜"]水果串列是否包含此水果，並顯示該水果是串列中的第幾項




```python
fruits = ["香蕉","蘋果","橘子","鳳梨","s"]
while True:
    fruit = input("請輸入喜歡的水果(Enter 結束)：")
    if (fruit==""):
        break
    n = fruits.count(fruit) 
    if (n>0):  # 串列元素存在
        p=fruits.index(fruit)
        print("%s 在串列中的第 %d 項" %(fruit,p+1))
    else:
        print(fruit,"不在串列中!")
```

    請輸入喜歡的水果(Enter 結束)：蘋果
    蘋果 在串列中的第 2 項
    請輸入喜歡的水果(Enter 結束)：s
    s 在串列中的第 5 項
    請輸入喜歡的水果(Enter 結束)：
    


#### 實作6

西元2021年是牛年。請你開發一個程式:
當使用者輸入他的出生西元年之後，畫面會顯示這個西元年的生肖。


```python
animals = "鼠牛虎免龍蛇馬羊猴雞狗豬"
year = int(input("請輸入你的出生西元年："))
print("西元{}年出生屬{}".format(year, animals[(year-2020) % 12]))
```

    請輸入你的出生西元年：1966
    西元1966年出生屬馬
    

### {範例}
#### 1.  串列出值設定 \<list1>
#### 2.  使用 for 迴圈讀取串列元素 \<list2>
#### 3.  利用迴圈配合索引讀取串列元素 \<list3>
#### 4.  以串列計算班級成績 \<append1>
#### 5.  刪除指定串列元素  \<remove>
#### 6.  成績由大到小排序  \<sorted>






```python
#串列出值設定 <list1>
scores = [85, 79, 93]
print("國文成績：%d 分" % scores[0])
print("數學成績：%d 分" % scores[1])
print("英文成績：%d 分" % scores[2])
```


```python
#使用 for 迴圈讀取串列元素 <list2>
items = [12, "Apple", True]
for item in items:
    print(item)
```


```python
#利用迴圈配合索引讀取串列元素 <list3>
subjects=["國文","數學","英文"]
scores = [85, 79, 93]
for i in range(len(scores)): # 即 for i in range(3):
    print("%s成績：%d 分" % (subjects[i],scores[i]))
```


```python
#以串列計算班級成績 <append1>
scores = []
total = inscore = 0
while(inscore != -1):
    inscore = int(input("請輸入學生的成績："))
    if (inscore!=-1):  # 將成績加入 scores 串列中
        scores.append(inscore)
print("共有 %d 位學生" % (len(scores)))
for score in scores:  # 將成績累加
    total += score
average = total / (len(scores))  #求平均值
print("本班總成績：%d 分，平均成績：%5.2f 分" % (total, average))
```


```python
#刪除指定串列元素 <remove>
fruits = ["香蕉","蘋果","橘子","鳳梨","西瓜"]
while True:
    print("串列元素有：",fruits)
    fruit = input("請輸入要刪除的水果(Enter 結束)：")
    if (fruit==""):
        break
    n = fruits.count(fruit) 
    if (n>0):  # 串列元素存在
        fruits.remove(fruit)
    else:
        print(fruit,"不在串列中!")
```


```python
#成績由大到小排序 <sorted>
scores = []
while True:
    inscore = input("請輸入學生的成績：")
    if (inscore==""):
        break
    # 將成績轉為數值後加入 scores 串列中
    scores.append(int(inscore))  

scores2=sorted(scores,reverse=True) # 由大到小排序
print("成績由大到小排序：",scores2) 

#
list1=[3,2,1,5] #[3, 2, 1, 5]
list2=sorted(list1,reverse=True)
print(list2)    #[5, 3, 2, 1]
print(list1)    #[3, 2, 1, 5]
```


```python
#sequential 
num=[256,731,943,389,142,645,829,945]
name=["林小虎","王中森","邵木淼","李大同","陳子孔","鄭美麗","曾溫柔","錢來多"]
no = int(input("請輸入中獎者的編號："))
 
Isfound=False
for i in range(len(name)):  #逐一比對搜尋 
    if (num[i]==no):        #號碼相符 
        Isfound=True        #設旗標為 True
        break               #結束比對

if (Isfound==True):
    print("中獎者的姓名為：",name[i])
else:
    print("無此中獎號碼！")
print("共比對 %d次 " %(i+1))    
```

    請輸入中獎者的編號：945
    中獎者的姓名為： 錢來多
    共比對 8次 
    


```python
#test
list1 = [1,2,3,4,5,6]
del list1[1]
print(list1) #[1,3,4,5,6]       

```

## 【afterclass practice】

1. 綜合演練 選擇題1-10  (需抄題在markdown cell ; 有程式碼的題目要有code cell )
2. 教學影音 lesson 8

