1. 程式人生 > 其它 >Python中的for迴圈

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