Python for循環(huán)可以遍歷任何序列的項(xiàng)目,如一個(gè)列表或者一個(gè)字符串。
Python中的for循環(huán)用于迭代序列(list,tuple,string)或其他可迭代對(duì)象。在序列上進(jìn)行迭代稱為遍歷。
for val in sequence: Body of for
在此,val是在每次迭代中獲取序列內(nèi)項(xiàng)目值的變量。
循環(huán)繼續(xù)直到我們到達(dá)序列中的最后一項(xiàng)。使用縮進(jìn)將for循環(huán)的主體與其余代碼分開。
#程序查找列表中存儲(chǔ)的所有數(shù)字的總和 #數(shù)字清單 numbers = [6, 5, 3, 8, 4, 2, 5, 4, 11] # 用于存儲(chǔ)總和的變量 sum = 0 # 遍歷列表 for val in numbers: sum = sum+val print("總和是", sum)
當(dāng)您運(yùn)行程序時(shí),輸出將是:
總和是 48
我們可以使用range()函數(shù)生成數(shù)字序列。range(10)會(huì)產(chǎn)生0到9之間的數(shù)字(10個(gè)數(shù)字)。
我們還可以將開始,停止和步長(zhǎng)定義為range(start, stop,step_size)。如果未提供,則step_size默認(rèn)為1。
range對(duì)象在某種意義上是“惰性的”,因?yàn)樗粫?huì)在我們創(chuàng)建它時(shí)生成它“包含”的所有數(shù)字。但是它不是迭代器,它支持in、len和getitem操作。
此函數(shù)不將所有值存儲(chǔ)在內(nèi)存中;這將是低效的。因此,它會(huì)記住開始、停止、步長(zhǎng),并在運(yùn)行中生成下一個(gè)數(shù)字。
要強(qiáng)制此函數(shù)輸出所有項(xiàng)目,可以使用函數(shù)list()。
以下示例將演示了這一點(diǎn)。
print(range(10)) print(list(range(10))) print(list(range(2, 8))) print(list(range(2, 20, 3)))
輸出結(jié)果
range(0, 10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [2, 3, 4, 5, 6, 7] [2, 5, 8, 11, 14, 17]
我們可以在for循環(huán)中使用 range() 函數(shù)來迭代數(shù)字序列。它可以與len()函數(shù)結(jié)合使用索引來遍歷序列。這是一個(gè)示例。
# 使用索引遍歷列表的程序 genre = ['pop', 'rock', 'jazz'] # 使用索引遍歷列表 for i in range(len(genre)): print("I like", genre[i])
運(yùn)行該程序時(shí),輸出為:
I like pop I like rock I like jazz
for循環(huán)也可以有一個(gè)可選的else塊。
如果for循環(huán)中使用的序列中的項(xiàng)耗盡,則執(zhí)行else部分。
break關(guān)鍵字可用于停止for循環(huán)。在這種情況下,else部分將被忽略。
因此,如果沒有發(fā)生中斷,則運(yùn)行for循環(huán)的else部分。
這是一個(gè)示例來說明這一點(diǎn)。
digits = [0, 1, 5] for i in digits: print(i) else: print("沒有剩余的項(xiàng)目.")
運(yùn)行該程序時(shí),輸出為:
0 1 5 沒有剩余的項(xiàng)目.
在這里,for循環(huán)將打印列表中的項(xiàng)目,直到循環(huán)用盡。當(dāng)for循環(huán)用盡時(shí),它執(zhí)行else代碼塊并輸出 "沒有剩余的項(xiàng)目"。
for...else語(yǔ)句可與break關(guān)鍵字一起使用,以便僅在未執(zhí)行break關(guān)鍵字時(shí)運(yùn)行else塊。讓我們舉個(gè)示例:
# 顯示記錄中學(xué)生成績(jī)的程序 student_name = 'Soyuj' marks = {'James': 90, 'Jules': 55, 'Arthur': 77} for student in marks: if student == student_name: print(marks[student]) break else: print('沒有找到該名稱的條目.')
輸出結(jié)果
沒有找到該名稱的條目.