Python中的for迴圈
文章轉自:https://mp.weixin.qq.com/s/CJxtj-qCRtpLB-UrA3beuA
1、可迭代物件
1.1什麼是可迭代物件
可迭代物件(Iteratable Object)
是能夠一次返回其中一個成員的物件,比如我們常用的字串、列表、元組、集合、字典等等之類的物件都屬於可迭代物件,獲取到這些物件我們就可以用for迴圈來進行操作。
簡單來理解,任何你可以迴圈遍歷的物件都是可迭代物件。
1.2怎麼判斷
如何判斷一個Python物件是不是可迭代物件?通常是使用isinstance()
函式來判斷物件是否是可迭代物件
小結:在Python常見的資料物件中,只有數字是不可迭代的,字串、元組、列表、字典等都是可迭代的
2、字串的for迴圈
一次遍歷列印字串中的每個元素
for i in "python": print(i) p y t h o n
在看另一個例子:
for i in "abcdefg": print(i) a b c d e f g
3、列表的for迴圈
不管是單層列表還是多層的巢狀列表,我們都可以遍歷打印出來:
# 單層列表 a = ["小明","小紅","小張","小王"] for i in a: print(i) # 列印列表中的每個元素 小明 小紅 小張 小王 # 巢狀列表 b = ["小明","小紅","小張","小王",[19,20,18,23]]for i in b: print(i) 小明 小紅 小張 小王 [19, 20, 18, 23]
上面的例子中最後一個元素當做整體被打印出來,如果也想分開列印呢?
def qiantao(x): # 定義一個函式 for each in x: # 遍歷每個原始列表中的每個元素 if isinstance(each, list): # 判斷每個元素是否是列表:isintance qiantao(each) # 如果是列表,遞迴執行函式qiantao() else: print(each) #如果不是列表,就直接列印該元素 b = ["小明","小紅","小張","小王",[19,20,18,23]] # 呼叫函式,傳入列表b qiantao(b) 小明 小紅 小張 小王 19 20 18 23
4、元組的for迴圈
元組tuple的迴圈和列表是類似的:
t = ("小明","小紅","小王") for i in t: print(i) 小明 小紅 小王
5、字典的for迴圈
我們使用keys()、values()、items(),我們可以分別遍歷字典的鍵、值和鍵值對。需要注意的是:遍歷字典預設是遍歷字典的鍵,先定義一個字典:
d = {"name":"Peter","age":20,"sex":"male","address":"china"}
5.1keys()
遍歷字典的鍵;
for i in d.keys(): # 遍歷字典的鍵 print(i) name age sex address for i in d: # 預設就是遍歷鍵的取值 print(i) name age sex address
5.2 values()
遍歷字典的值:
for i in d.values(): # 遍歷字典的值 print(i) Peter 20 male china
5.3 items()
同時遍歷字典的鍵和值
for i in d.items(): # 遍歷字典的值 print(i) ('name', 'Peter') ('age', 20) ('sex', 'male') ('address', 'china')
分別取出字典的鍵和值:
for k,v in d.items(): print(k + "--->" + str(v)) name--->Peter age--->20 sex--->male address--->china
6、range函式的for迴圈
range函式是 Python 內建函式,用於生成一系列連續整數,多用於 for 迴圈中。
range(start,stop,step)
- start:包含start,預設為0,可不寫則預設為0
- stop:不包含stop,必須寫
- 步長step可正可負,預設是1,不能為0
1、基礎案例
range(10) # 生成的是可迭代物件 range(0, 10)
預設開頭是0
range(0,10)
range(0, 10)
指定開頭為1
range(1,10)
range(1, 10)
下面是將結果展開成列表:
list(range(10)) # 不包含10(尾部) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
指定步長為2:
list(range(0,10,2)) # 不包含10,步長是2 [0, 2, 4, 6, 8]
總結:range函式是包含頭部不包含尾部
for i in range(10): print(i) 0 1 2 3 4 5 6 7 8 9
2、找出100以內能夠被5整除的數:
for i in range(101): # 不包含101,0-100 if i % 5 == 0: # %表示求餘數:餘數為0則表示整除 print(i,end="、") 0、5、10、15、20、25、30、35、40、45、50、55、60、65、70、75、80、85、90、95、100、
3、高斯求和
求出1到100的所有數之和
sum = 0 for i in range(1,101): sum = sum + i # 每迴圈一次,sum就是這個數字 sum 5050
求出100以內奇數的和:
sum = 0 # 步長為2,從1開始:1,3,5,7... for i in range(1,101,2): sum = sum + i sum 2500
求出100以內偶數的和:
sum = 0 # 步長為2,從2開始:2,4,6,8... for i in range(2,101,2): sum = sum + i sum 2550
7、多個for語句
for語句中還可以再使用for語句:
for i in ["python","java","html"]: for j in i: print(i.upper(),j) # upper():將字母變成大寫 PYTHON p PYTHON y PYTHON t PYTHON h PYTHON o PYTHON n JAVA j JAVA a JAVA v JAVA a HTML h HTML t HTML m HTML l for i in [4,5,6]: for j in [1,2,3]: print(i*j) # 實現任意兩個數的乘法 4 # 4*1 8 # 4*2 12 # 4*3 5 # 5*1 10 # 5*2 15 # 5*3 6 # 6*1 12 # 6*2 18 # 6*3
8、列表推導式
(1)上面我們提到能夠被5整除的數:使用for迴圈和if來解決
five = [] # 定義空列表 for i in range(101): # 不包含101,0-100 if i % 5 == 0: # %表示求餘數:餘數為0則表示整除 five.append(i) # 新增到列表中 five [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100]
(2)使用列表推導式如何實現呢?
[x for x in range(101) if x % 5 == 0] [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100]
9、for-else
也許你聽過if-else,但是聽到for-else語句嗎?這也算是Python中的一個冷門知識點
for i in range(5): print(i) else: print("結束") 0 1 2 3 4 結束
也就是說:for語句結束了依然會執行else的語句
for i in []: print(i) else: print("結束") 結束
下面的例子中,當i除以3的餘數是2的時候回跳出並終止整個for迴圈,後面的else就不會執行了
for i in range(10): print(i) if i % 3 == 2: break else: print("結束") 0 1 2
10、實現三角陣列
for i in range(1,11): for k in range(1,i): print(k, end=" ") print("\n") 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 3 4 5 6 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 9
如果我們想要倒過來,該如何實現呢?
for i in range(10,0,-1): for k in range(1,i): print(k, end=" ") print("\n") 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 1 2 3 4 5 6 1 2 3 4 5 1 2 3 4 1 2 3 1 2 1
11、99乘法表
下面舉個例子來說明如何實現99乘法表
for i in range(1,10): for j in range(1,i+1): # 為了保證有4*4,也就是同個數字相乘的等式,需要讓i出現,使用i+1 print('{}x{}={}'.format(j, i, i*j), end=" ") # end的結束符號用空格 print("\n")
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81