Python中的for迴圈,沒你想的那麼簡單

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

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迴圈是什麼構成的?)

是什麼:在計算科學中,是針對特殊迭代物件的控制流語句,能夠重複執行

怎麼構成:一個頭部(是可迭代物件)+ 每個物件的執行

本文的主要內容如下:

Python中的for迴圈,沒你想的那麼簡單

1、可迭代物件

1。1什麼是可迭代物件

可迭代物件(Iteratable Object)

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

簡單來理解,任何你可以迴圈遍歷的物件都是可迭代物件

1。2怎麼判斷

如何判斷一個Python物件是不是可迭代物件?通常是使用

isinstance()

函式來判斷物件是否是可迭代物件

from collections import Iterable

Python中的for迴圈,沒你想的那麼簡單

小結:在Python常見的資料物件中,只有數字是不可迭代的,字串、元組、列表、字典等都是可迭代的

2、字串的for迴圈

一次遍歷列印字串中的每個元素

for i in “python”: print(i)

python

在看另一個例子:

for i in “abcdefg”: print(i)

abcdefg

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]]# 呼叫函式,傳入列表bqiantao(b)

小明小紅小張小王19201823

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)

nameagesexaddress

for i in d: # 預設就是遍歷鍵的取值 print(i)

nameagesexaddress

5。2 values()

遍歷字典的值:

for i in d。values(): # 遍歷字典的值 print(i)

Peter20malechina

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——->Peterage——->20sex——->maleaddress——->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)

0123456789

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 = 0for 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 pPYTHON yPYTHON tPYTHON hPYTHON oPYTHON nJAVA jJAVA aJAVA vJAVA aHTML hHTML tHTML mHTML l

for i in [4,5,6]: for j in [1,2,3]: print(i*j) # 實現任意兩個數的乘法

4 # 4*18 # 4*212 # 4*35 # 5*1 10 # 5*215 # 5*36 # 6*112 # 6*218 # 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(“結束”)

01234結束

也就是說: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: breakelse: print(“結束”)

012

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乘法表,如何

玩轉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”)

Python中的for迴圈,沒你想的那麼簡單