深入理解Python中的for循環語句

公衆號:尤而小屋
作者:Peter
編輯:Peter

大家好,我是Peter~

一年四季,循環往復:說到底就是一個循環的問題

for語句實際上解決的是循環問題。在很多的高級語言中都有for循環(for loop)。

for語句是編程語言中針對可迭代對象的語句,它的主要作用是允許代碼被重複執行。看一段來自維基百科的介紹:

In computer science, a for-loop (or simply for loop) is a control flow statement for specifying iteration, which allows code to be executed repeatedly。(作用:介紹了for循環是什麼?)

A for-loop has two parts: a header specifying the iteration, and a body which is executed once per iteration. (for循環是什麼構成的?)

  • 是什麼:在計算科學中,是針對特殊迭代對象的控制流語句,能夠重複執行
  • 怎麼構成:一個頭部(是可迭代對象)+ 每個對象的執行體

可迭代對象

什麼是可迭代對象

可迭代對象(Iteratable Object) 是能夠一次返回其中一個成員的對象,比如我們常用的字符串、列表、元組、集合、字典等等之類的對象都屬於可迭代對象,獲取到這些對象我們就可以用for循環來進行操作。

簡單來理解,任何你可以循環遍歷的對象都是可迭代對象

怎麼判斷

如何判斷一個Python對象是不是可迭代對象?通常是使用 isinstance()函數來判斷對象是否是可迭代對象

from collections import Iterable

小結:在Python常見的數據對象中,只有數字是不可迭代的,字符串、元組、列表、字典等都是可迭代的

字符串的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

列表的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

元組的for循環

元組tuple的循環和列表是類似的:

t = ("小明","小紅","小王")

for i in t:
    print(i)
小明
小紅
小王

字典的for循環

我們使用keys()、values()、items(),我們可以分別遍歷字典的鍵、值和鍵值對。需要注意的是:遍歷字典默認是遍歷字典的鍵,先定義一個字典:

d = {"name":"Peter","age":20,"sex":"male","address":"china"}

keys

遍歷字典的鍵;

for i in d.keys():  # 遍歷字典的鍵
    print(i)
name
age
sex
address
for i in d:  # 默認就是遍歷鍵的取值
    print(i)
name
age
sex
address

values

遍歷字典的值:

for i in d.values():  # 遍歷字典的值
    print(i)
Peter
20
male
china

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

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

多個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

推導式

(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]

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

實現三角陣列

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       

99乘法表

下面舉個例子來說明如何實現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")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章