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循環是什麼構成的?)
是什麼:在計算科學中,是針對特殊迭代對象的控制流語句,能夠重復執行
怎麼構成:一個頭部(是可迭代對象)+ 每個對象的執行
1、可迭代對象
1.1什麼是可迭代對象
可迭代對象(Iteratable Object
) 是能夠一次返回其中一個成員的對象,比如我們常用的字符串、列表、元組、集合、字典等等之類的對象都屬於可迭代對象,獲取到這些對象我們就可以用for循環來進行操作。
簡單來理解,任何你可以循環遍歷的對象都是可迭代對象。
1.2怎麼判斷
如何判斷一個Python
對象是不是可迭代對象?通常是使用 isinstance()函數來判斷對象是否是可迭代對象
from collections import Iterable
小結:在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,可不寫則默認為0stop
:不包含stop,必須寫- 步長
step
可正可負,默認是1,不能為0
6.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
6.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、
6.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")
到此這篇關於Python中的for循環詳情的文章就介紹到這瞭,更多相關Python中的for循環內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python 列表(List)的底層實現原理分析
- python 類相關概念理解
- python進階從青銅到王者一定會用上的Python技巧
- 一篇文章帶你學習Python3的高級特性(1)
- python-for x in range的用法(註意要點、細節)