常規版本
簡單的 for 迴圈遍歷
x_n = ["x1","x2","x3"]
for x in x_n:
print(x)
>> x1
x2
x3
藉助 range() 和 len()
x_n = ["x1","x2","x3"]
for i in range(len(x_n)):
print(x_n[i])
>> x1
x2
x3
藉助 enumerate()
enumerate() 是 python 的內建函式,表示列舉的意思,其處理的是可迭代或者可遍歷物件(列表,字串等),可以同時獲得 值 和 其在物件中的索引號
x_n = ["x1","x2","x3"]
for i,x in enumerate(x_n):
print(i,x)
>> (0, 'x1')
(1, 'x2')
(2, 'x3')
藉助 iter()
iter() 的引數必須是一個可迭代或者可遍歷物件,這與enumerate() 一致,iter() 返回的是迭代器
x_n = ["x1","x2","x3"]
for x in iter(x_n):
print(x)
print(type(x_n))
print(type(iter(x_n)))
>> x1
x2
x3
>> <type 'list'>
>> <type 'listiterator'>
由於 iter() 可以構成迭代器物件的迭代器,其可以使用 next() 函式 來獲取迭代器的下一條資料
x_n = ["x1","x2","x3"]
x_i = iter(x_n)
for x in range(len(x_n)):
print(next(x_i))
>> x1
x2
x3
簡便版本(在 list 內部使用 for 迴圈)
簡單嵌入
一行程式碼就可以實現迴圈功能
my_list = [表示式 for 迴圈項 in 迴圈體 ]
例子:
import math
x_n = "Hello World"
y_n = [1,2,3]
my_listx = [n for n in x_n]
my_listy = [math.pow(n,2) for n in y_n] # 呼叫math庫的pow求冪
my_listy_1 = [pow(n,2) for n in y_n] # 呼叫python內建的pow求冪
print(my_listx)
print(my_listy)
print(my_listy_1)
>> ['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
>> [1.0, 4.0, 9.0]
>> [1, 4, 9]
tips: math庫的 pow() 輸入為 float 型,若輸入為整型(int)則自動轉換為 float,輸出結果也為 float;python 內建的pow() 輸入為整型,輸出為整型,輸入為float,輸出也為float
加入條件
在迴圈中使用條件判斷(在for迴圈的後面加或者前面加),以篩選出合適的資料
my_list = [表示式 for 迴圈項 in 迴圈體 if 條件]
或者有第二種形式:
my_list = [表示式1 if 條件 else 表示式2 for 迴圈項 in 迴圈體]
此時 if 必須要和 else 搭配,不然會報錯;且當 if 條件為真, 結果為表示式1,否者結果為 表示式2
例子:
import math
x_n = ["Hello World", "No good", "Good thing"]
y_n = [1,2,3,4]
my_listx = [n for n in x_n if n.startswith("Hello")]
my_listy = [math.pow(n,2) for n in y_n if n > 1]
print(my_listx)
print(my_listy)
>> ['Hello World']
>> [4.0, 9.0, 16.0]
-------------------------------------------
## 第二種形式 ##
import math
x_n = ["Hello World", "No good", "Good thing"]
y_n = [1,2,3,4]
my_listx = [n if n.startswith("Hello") else "No print" for n in x_n]
my_listy = [math.pow(n,2) if n > 2 else math.pow(n,3) for n in y_n]
print(my_listx)
print(my_listy)
>> ['Hello World', 'No print', 'No print']
>> [1.0, 8.0, 9.0, 16.0]
巢狀迴圈
與普通的for迴圈類似,list中也可以巢狀for迴圈來達到目的
my_list = [表示式 for 迴圈項1 in 迴圈體 for 迴圈項 in 迴圈項1]
其中第一個迴圈為最外層迴圈,後面的迴圈為內層迴圈,最後表示式的結果和次數都是按照最後一個迴圈內來計算的
例子:
x_n = ["Hello", "World"]
my_listx = [n for name in x_n for n in name]
my_listy = [name for name in x_n for n in name]
print(my_listx)
print(my_listy)
>> ['H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd']
>> ['Hello', 'Hello', 'Hello', 'Hello', 'Hello', 'World', 'World', 'World', 'World', 'World']
--------------------------------
## 上面的和下面的一樣的效果 ##
my_list1 = []
my_list2 = []
for name in x_n:
for n in name:
my_list1.append(n)
my_list2.append(name)
print(my_list1)
print(my_list2)
>> ['H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd']
>> ['Hello', 'Hello', 'Hello', 'Hello', 'Hello', 'World', 'World', 'World', 'World', 'World']