for
跟其他程式語言比較不一樣,不用設變數遞增,並且判斷長度items
是一個可走訪(sequence)的物件,如 list、tuple、set、字串等
item
則是走訪的值for
也可以有 else
區塊,但我還真沒看過
for
迴圈內順利跑完未中斷,則會繼續進行 else
區塊,中斷如遇到 break
跳出整個迴圈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
enumerate(sequence, [start=0])
:可以回傳一個含 index 的值,因此若需要 index 跟值會比較常使用
zip([iterable, ...])
:可將多組可走訪的物件合成 tuple
*
來解包,取得原來的結果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 似乎有不少妙用,接下來總算要來看看函式了!