iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0
Software Development

Python 微進階系列 第 9

Python 微進階 Day09 - 流程控制 - 2 - for、range()、enumerate()、zip()

  • 分享至 

  • xImage
  •  

迴圈

for

  • for 跟其他程式語言比較不一樣,不用設變數遞增,並且判斷長度
  • 可以直接走訪,因此 items 是一個可走訪(sequence)的物件,如 list、tuple、set、字串等
    • item 則是走訪的值
  • for 也可以有 else 區塊,但我還真沒看過
  • 注意! 不要在跑迴圈的時候去修改 list,例如 del,list 會變動導致錯誤
for item in items:
    主程式內容
# ---- 以下非必要
else:
    else 程式區塊
numbers = [1, 2, 3, 4, 5]

for i in range(len(numbers)):
    del numbers[2]
    print(numbers)

# [1, 2, 4, 5]
# [1, 2, 5]
# [1, 2]
# IndexError: list assignment index out of range
# list 被改動,甚至造成錯誤

常用函式

  • range(start, stop[, step]):如果需要 index(索引),會使用 range
    • start:預設為 0 開始
    • stop:必要值,到 stop 為止,但不包括 stop(有頭無尾)
    • step:非必要,預設間隔為 1,也可是負數(反循環)
  • enumerate(sequence, [start=0]):可以回傳一個含 index 的值,因此若需要 index 跟值會比較常使用
    • sequence:必要
    • start:非必要,index 預設為 0
  • zip([iterable, ...]):可將多組可走訪的物件合成 tuple
    • iterable:可走訪的物件
    • 會以最短的為主(長度為 0 也是),超過的會被捨棄,不會跳錯誤
    • 可以用 * 來解包,取得原來的結果
    • 也可應用在 dict 上

range

for number in range(1, 6, 2):
    print(number)

# 1
# 3
# 5
# 不包含 6

for number in range(3, 1, -1):
    print(number)

# 3
# 2
# 不包含 1
x = "python"

for i in x:
    print(i)

# p
# y
# t
# h
# o
# n
# 印出走訪的值
x = "python"

for i in range(len(x)) :
    print(i, x[i])

# range 內為整數,所以 x 須改成長度
# 值則是使用 x[i] 來取得
# 0 p
# 1 y
# 2 t
# 3 h
# 4 o
# 5 n

enumerate

x = "python"

for i, j in enumerate(x) :
    print(i, j)

# tuple 解包成 i 和 j
# 0 p
# 1 y
# 2 t
# 3 h
# 4 o
# 5 n

for i in enumerate(x, 1) :
    print(i)

# 為 tuple, index 起始為 1
# (1, 'p')
# (2, 'y')
# (3, 't')
# (4, 'h')
# (5, 'o')
# (6, 'n')

zip

x = "python"
y = "hello"
z = "world"

for i in zip(x, y, z) :
    print(i)

# 取短的,x 最後的 n 被捨棄
# 可 zip 超過 2 組
# ('p', 'h', 'w')
# ('y', 'e', 'o')
# ('t', 'l', 'r')
# ('h', 'l', 'l')
# ('o', 'o', 'd')
x = "python"
y = "hello"

zipped = zip(x, y)
print(zipped)

# <zip object>

print(list(zip(*zipped)))

# [('p', 'y', 't', 'h', 'o'), ('h', 'e', 'l', 'l', 'o')]
# zip 時取最短的
# zipped 已被解包
x = "python"
y = "hello"

zipped = zip(x, y)

for i in zip(*zipped):
    print(i)

# ('p', 'y', 't', 'h', 'o')
# ('h', 'e', 'l', 'l', 'o')
# 長度為 2
names = ["A", "B", "C"]
scores = [98, 100, 85]
total = dict(zip(names, scores))

print(total)
# {'A': 98, 'B': 100, 'C': 85}

參考資料

次回

zip 似乎有不少妙用,接下來總算要來看看函式了!


上一篇
Python 微進階 Day08 - 流程控制 - 1 - if、while、break、continue、pass
下一篇
Python 微進階 Day10 - function(函式) - 1 - 參數
系列文
Python 微進階31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言