iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 4
1
AI & Data

python 入門到分析股市系列 第 4

[Day04]Python 基礎語法 - list、tuple、dict、for、while

  • 分享至 

  • xImage
  •  

導讀

前言

今天鐵人競賽第4天,之前介紹了Python的基本資料型別,Boolean、Int、Float、String。接下來要來介紹序列結構(list、tuple、字典),用來表達一系列的項目。


list(串列)

串列:由零或多個元素組成的,以「,」逗號分隔,並且放在[]裡面。
語法:[element1,element2.....]
以下示範建立基本的串列結構,和如何取值

ironman_list = ["中信兄弟", "統一獅", "lamigo", "富邦悍將"]
print('總冠軍隊伍', ironman_list[0]) 
print('亞軍隊伍', ironman_list[-2])
# 輸出結果
總冠軍隊伍 中信兄弟
亞軍隊伍 lamigo
  • range()
    range:建立整數的串列可用range
    語法: range(起始值 [,終止值, 間格值])
    ironman_list1 = range(5)
    ironman_list2 = range(3,8)
    ironman_list3 = range(3,8,2)
    print(list(ironman_list1))
    print(list(ironman_list2))
    print(list(ironman_list3))
    
    # 輸出結果
    [0, 1, 2, 3, 4]
    [3, 4, 5, 6, 7]
    [3, 5, 7]
    

進階的串列操作

  • 串列重複
    解釋:串列重複n次
    語法:[list]*n 串列重複n次

    ironman_list1 = [1,2,3,4,5,6]
    ironman_list2 = ironman_list1*2
    print(ironman_list2)
    
    # 輸出結果
    [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]
    
  • 切片取值
    解釋:串列取值的方式除了可以使用index取得單一值,也可以使用切片的方式取得多個值
    語法:[n,m] 取出index n~(m-1)的元素

    ironman_list1 = [1,2,3,4,5,6]
    print(list(ironman_list1[2:5]))
    
    # 輸出結果
    [3, 4, 5]
    

    切片取值也可設定間格,語法如下
    語法:[n,m,o] 取出index n~(m-1)的元素,間隔為o

    ironman_list1 = [1,2,3,4,5,6]
    print(list(ironman_list1[1:4:2]))
    
    # 輸出結果
    [2, 4]
    
  • 刪除元素
    語法:del
    以下示範用切片的方式刪除元素

    ironman_list1 = [1,2,3,4,5,6]
    del ironman_list1[1:4]
    print(list(ironman_list1))
    
    # 輸出結果
    [1, 5, 6]
    
  • 串列預設函數

    • len():串列元素數目
    • min():串列元素最小值
    • max():串列元素最大值
    ironman_list1 = [1,2,3,4,5,6]
    print('串列元素數目----->',len(ironman_list1))
    print('串列元素最小值--->',min(ironman_list1))
    print('串列元素最大值--->',max(ironman_list1))
    
    # 輸出結果
    串列元素數目-----> 6
    串列元素最小值---> 1
    串列元素最大值---> 6
    

    如果想取得某個元素在串列中的操作可以使用以下函數

    • index():元素在串列中第一次出現的index
    • count():元素在串列中出現的次數
    ironman_list1 = [1,2,3,4,3,6,3]
    print('元素3第一次出現的位置------>',ironman_list1.index(3))
    print('元素在串列中出現的次數----->',ironman_list1.count(3))
    
    # 輸出結果
    元素3第一次出現的位置------> 2
    元素在串列中出現的次數-----> 3
    

    在list中加入元素

    • A.append(E):在A串列中加入E元素
    • A.extend(B):在A串列中加入B串列的元素
    • A.insert(B):在A串列中加入B串列
      extend和insert雖然B同樣都是串列,但加入A串列的方式不一樣,可以注意一下
    ironman_list1 = [1,2,3,4,5,6]
    ironman_list1.append(8)
    print('將8做為元素加在list最後---->',list(ironman_list1))
    ironman_list1 = [1,2,3,4,5,6]
    ironman_list1.extend([8,9])
    print('將[8,9]中的元素加在list最後---->',list(ironman_list1))
    ironman_list1 = [1,2,3,4,5,6]
    ironman_list1.insert(3,8)
    print('在index 3的位置加入元素8---->',list(ironman_list1))
    
    # 輸出結果
    將8做為元素加在list最後----> [1, 2, 3, 4, 5, 6, 8]
    將[8,9]中的元素加在list最後----> [1, 2, 3, 4, 5, 6, 8, 9]
    在index 3的位置加入元素8----> [1, 2, 3, 8, 4, 5, 6]
    

    移除串列的元素

    • pop():取出串列中最後一個元素,並且移除元素
    • A.remove(E):移除A串列中第一個出現E元素
    ironman_list1 = [1,2,3,4,5,6]
    n = ironman_list1.pop()
    print('取出list最後一個元素並且移除---->',n)
    ironman_list1 = [2,3,4,5,6]
    ironman_list1.remove(3)
    print('移除第一次出現3的元素---->',list(ironman_list1))
    
    # 輸出結果
    取出list最後一個元素並且移除----> 6
    移除第一次出現3的元素----> [2, 4, 5, 6]
    

    其他串列函數操作

    • reverse():反轉串列的順序
    • sort():將串列做排序
    ironman_list1 = [2,5,6,3,4]
    ironman_list1.reverse()
    print('反轉list順序---->',list(ironman_list1))
    ironman_list1 = [3,2,5,7,4]
    ironman_list1.sort()
    print('將list從小到大排列---->',list(ironman_list1))
    
    # 輸出結果
    反轉list順序----> [4, 3, 6, 5, 2]
    將list從小到大排列----> [2, 3, 4, 5, 7]
    

Tuple(元組):不能修改的List

優點:執行速度比list快,儲存在Tuple的資料比較安全
以下示範建立tuple,不同於list使用[],tuple使用()

ironman_tuple = ("中信兄弟", "統一獅", "lamigo", "富邦悍將")
print('總冠軍隊伍', ironman_tuple[0]) 
print('亞軍隊伍', ironman_tuple[-2])
# 輸出結果
總冠軍隊伍 中信兄弟
亞軍隊伍 lamigo
  • list和tuple互相轉換
    ironman_tuple = ("中信兄弟", "統一獅", "lamigo", "富邦悍將")
    ironman_list = ["brother","lion","monkey","Guardians"]
    tuple_to_list = list(ironman_tuple)
    list_to_tuple = tuple(ironman_list)
    print(list(tuple_to_list))
    print(list(list_to_tuple))
    
    # 輸出結果
    ['中信兄弟', '統一獅', 'lamigo', '富邦悍將']
    ['brother', 'lion', 'monkey', 'Guardians']
    

Dict(字典):key-map的形式

list和Tuple都是使用數字取得元素值的方式,如果想要用其他key值來取值就可以使用Dict
語法:{key1:value1 [,key2:value2,…]}
以下範例建立一個dict

ironman_dict = {"team":"中信兄弟","year":"2017","ranking":2}
print(ironman_dict["team"])
# 輸出結果
中信兄弟
  • 刪除Dict
    在Dict有三種刪除的動作
    • del A[key]:刪除元素 A[key]
    • A.clear():刪除A Dict所有元素
    • del A:刪除A Dict
    del ironman_dict["team"]  #刪除元素
    print(ironman_dict) 
    
    ironman_dict.clear() #刪除所有元素
    print(ironman_dict)
    
    del ironman_dict # 刪除dict
    
    # 輸出結果
    {'year': '2017', 'ranking': 2}
    {}
    

迴圈

介紹完序列結構,可以使用迴圈的方式來取值,Python有兩種迴圈(for、while),python用縮排和冒號「:」來表示區塊

  • for
    示範單一for迴圈
ironman_list1 = range(0, 5)
for i in ironman_list1:
    print(i,end=",")
# 輸出結果
1,2,3,8,4,5,6,

巢狀的for迴圈,這邊示範9*9乘法表

for i in range(1,10):
    for j in range(1,10):
        product = i * j
        print("%d*%d=%-2d " % (i,j, product), end=" ")
    print() #斷行
# 輸出結果
1*1=1   1*2=2   1*3=3   1*4=4   1*5=5   1*6=6   1*7=7   1*8=8   1*9=9   
2*1=2   2*2=4   2*3=6   2*4=8   2*5=10  2*6=12  2*7=14  2*8=16  2*9=18  
3*1=3   3*2=6   3*3=9   3*4=12  3*5=15  3*6=18  3*7=21  3*8=24  3*9=27  
4*1=4   4*2=8   4*3=12  4*4=16  4*5=20  4*6=24  4*7=28  4*8=32  4*9=36  
5*1=5   5*2=10  5*3=15  5*4=20  5*5=25  5*6=30  5*7=35  5*8=40  5*9=45  
6*1=6   6*2=12  6*3=18  6*4=24  6*5=30  6*6=36  6*7=42  6*8=48  6*9=54  
7*1=7   7*2=14  7*3=21  7*4=28  7*5=35  7*6=42  7*7=49  7*8=56  7*9=63  
8*1=8   8*2=16  8*3=24  8*4=32  8*5=40  8*6=48  8*7=56  8*8=64  8*9=72  
9*1=9   9*2=18  9*3=27  9*4=36  9*5=45  9*6=54  9*7=63  9*8=72  9*9=81  
  • break 及 continue
    在迴圈中如果要終止可以使用break、continue
    以下示範break(會直接離開迴圈)
for i in range(1,11):
    if(i==6):
        break
    print(i, end=",") 
# 輸出結果,6之後就不執行
1,2,3,4,5,

現在使用continue看跟break有什麼不同(迴圈執行中途暫時停住不往下執行,而跳到迴圈起始處繼續執行)

 for i in range(1,11):
     if(i==6):
         continue
     print(i, end=",")
# 輸出結果,只有6不會執行,>6還會執行
1,2,3,4,5,7,8,9,10,

python在for中還可以使用else,用在當for中的if條件一直不滿足時最後會執行else
下面示範驗證數字是否為質數

n = 5
if(n==2):
    print("2是質數!")
else:
    for i in range(2,n):
        if(n % i == 0):
            print("%d 不是質數!" %n)
            break
    else:
        print("%d是質數!" %n)
# 輸出結果
5是質數!
  • while
total = n = 0
while(n<10):
    n += 1
    total += n
print(total)
# 輸出結果
55

上一篇
[Day03]Python 基礎語法 - 變數、運算子、運算元、判斷式
下一篇
[Day05]Python 基礎語法 - function、import
系列文
python 入門到分析股市30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
Andy Chiu
iT邦研究生 2 級 ‧ 2018-11-08 10:28:49

發現筆誤喔!

ironman_list1 = range(0, 5)
for i in list1:
    print(i,end=",")

list1=>ironman_list1

Summer iT邦新手 5 級 ‧ 2018-11-08 11:19:51 檢舉

哇,真的ㄟ,感謝你的回饋~~我立馬改一下

0
ckchuang
iT邦新手 4 級 ‧ 2019-08-16 16:24:28

Hi Summer,

找到一個可以建議的地方,就是「Tuple(元組)」第一個建立 tuple 的範例:

ironman_tuple = ("中信兄弟", "統一獅", "lamigo", "富邦悍將")
print('總冠軍隊伍', ironman_tuple[0]) 
print('亞軍隊伍', ironman_tuple[-2])

因為我看的時候遲疑了一下,改成上面這樣好像好一點 XD

Summer iT邦新手 5 級 ‧ 2019-08-16 17:16:52 檢舉

應該是參數忘記改名稱了

1
dick90012000
iT邦新手 5 級 ‧ 2023-03-15 20:33:10

介紹Tuple的範例程式碼
為何最後在print出來時又要轉型成list

print(list(tuple_to_list))
print(list(list_to_tuple))
SK. iT邦新手 5 級 ‧ 2024-04-24 09:10:44 檢舉

謝謝提醒!確實直接print出來即可

print(tuple_to_list)
print(list_to_tuple)

我要留言

立即登入留言