如果你剛接觸 Python,可能很快就會遇到一個繞不開的關(guān)鍵字——for
。 有人說,Python 的 for 循環(huán)就像是一把“萬能鑰匙”,不管是數(shù)字、字符串、列表、字典,還是更復(fù)雜的數(shù)據(jù)結(jié)構(gòu),它都能輕輕松松幫你解鎖。
我第一次用 Python 寫 for 循環(huán)時,感覺就像小時候數(shù)臺階:
- 以前用 while 循環(huán),要自己算條件、手動加 1,很容易掉坑里。
- 但 Python 的 for 循環(huán),就像“自動扶梯”,你只需要告訴它要走幾級臺階,它會把你送到終點(diǎn),順帶還能報(bào)個數(shù)。
今天這篇文章,我會帶你把 for 循環(huán)的方方面面都過一遍,保證你看完之后,不僅能寫,還能用好。
一、for 循環(huán)的基本用法
先上最核心的語法:
for 變量 in 序列:
# 循環(huán)體
else:
# 循環(huán)正常結(jié)束后執(zhí)行
和 while 循環(huán)比起來,for 循環(huán)更“優(yōu)雅”,特別適合用在 已知要循環(huán)多少次 或者 要遍歷一個集合 的場景。
比如最經(jīng)典的:打印 1 到 4。
for i in range(1, 5):
print(i)
else:
print('The for loop is over')
輸出:
1
2
3
4
The for loop is over
看出來了嗎?for 循環(huán)跑完之后,還能接一個 else
。這個 else
只有在循環(huán) 沒有被 break 打斷 的情況下才會執(zhí)行。
這小細(xì)節(jié),很多新手一開始都會忽略。
二、range():for 循環(huán)的好搭檔
如果說 for 是“萬能鑰匙”,那 range()
就是最常見的“鎖芯”。
它能快速生成一個整數(shù)序列,有三種用法:
- range(stop):默認(rèn)從 0 開始,到 stop-1 為止。
for i in range(5):
print(i) # 輸出0,1,2,3,4
- range(start, stop):從 start 開始,到 stop-1。
for i in range(2, 6):
print(i) # 輸出2,3,4,5
- range(start, stop, step):再加上步長。
for i in range(1, 10, 2):
print(i) # 輸出1,3,5,7,9
是不是特別像小時候玩“跳房子”?你可以一格一格數(shù),也可以隔一格跳。
三、for 循環(huán)能遍歷啥?
Python 的 for 循環(huán)簡直就是個“社交達(dá)人”,只要是可迭代的對象,它都能聊。 最常見的就是字符串、列表和字典。
1. 遍歷字符串
word = "Python"
for letter in word:
print(letter)
輸出:
P
y
t
h
o
n
字符串被拆開,字母一個個輸出,就像你逐個拆盲盒。
2. 遍歷列表
fruits = ['apple', 'banana', 'orange']
for fruit in fruits:
print(f"I like {fruit}")
輸出:
I like apple
I like banana
I like orange
是不是很適合寫購物清單提醒?
3. 遍歷字典
person = {'name': 'Alice', 'age': 25, 'city': 'New York'}
for key in person:
print(f"{key}: {person[key]}")
# 更好的方式
for key, value in person.items():
print(f"{key}: {value}")
兩種寫法,一種是“逐個問名字”,另一種是“直接報(bào)全套”,后者更優(yōu)雅。
四、嵌套 for 循環(huán):乘法表的秘密
如果 for 循環(huán)是單人舞,那嵌套 for 就是集體舞。
比如小學(xué)時學(xué)過的乘法表,用 Python 寫就是這樣:
for i in range(1, 10):
for j in range(1, i+1):
print(f"{j}×{i}={i*j}", end="\t")
print() # 換行
輸出的效果就是熟悉的九九乘法表。 每次看到這種代碼,我都覺得編程和童年數(shù)學(xué)課產(chǎn)生了奇妙的連接。
五、for-else:隱藏的寶藏
你知道嗎?Python 的 for 循環(huán)居然還能搭配 else
。 這個 else
只有在循環(huán) 正常結(jié)束 的時候才會執(zhí)行,一旦中途被 break
打斷,就不會觸發(fā)。
舉個例子:判斷質(zhì)數(shù)。
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print(f"{n} equals {x} * {n//x}")
break
else:
print(f"{n} is a prime number")
輸出:
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
...
很巧妙吧?內(nèi)層循環(huán)如果沒有 break,才會執(zhí)行 else
。 這就是 Python 的“優(yōu)雅黑魔法”。
六、高級玩法:讓 for 更有范兒
1. enumerate:要值也要索引
fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits):
print(f"Index {index}: {fruit}")
輸出:
Index 0: apple
Index 1: banana
Index 2: cherry
再也不用手動寫 i += 1
了。
2. zip:并行迭代
names = ['Alice', 'Bob', 'Charlie']
ages = [24, 30, 28]
for name, age in zip(names, ages):
print(f"{name} is {age} years old")
輸出:
Alice is 24 years old
Bob is 30 years old
Charlie is 28 years old
兩個列表“手牽手”,一起走。
3. 列表推導(dǎo)式:一句話搞定循環(huán)
# 傳統(tǒng)方式
squares = []
for x in range(10):
squares.append(x**2)
# 列表推導(dǎo)式
squares = [x**2 for x in range(10)]
一句話代替 4 行,簡潔到飛起。
七、實(shí)戰(zhàn)案例
案例 1:文件單詞統(tǒng)計(jì)
word_count = {}
with open('example.txt', 'r') as file:
for line in file:
words = line.strip().split()
for word in words:
word_count[word] = word_count.get(word, 0) + 1
print(word_count)
一個小小的 for 循環(huán),就能幫你完成簡易版的“詞頻分析器”。
案例 2:學(xué)生成績平均分
students = [
{'name': 'Alice', 'scores': [85, 90, 88]},
{'name': 'Bob', 'scores': [76, 82, 79]},
{'name': 'Charlie', 'scores': [91, 89, 93]}
]
for student in students:
avg = sum(student['scores']) / len(student['scores'])
print(f"{student['name']}'s average score: {avg:.2f}")
輸出:
Alice's average score: 87.67
Bob's average score: 79.00
Charlie's average score: 91.00
是不是很像老師在批改作業(yè)?
八、for 循環(huán)的注意事項(xiàng)
別在遍歷時修改列表: 一邊迭代一邊修改,可能會出現(xiàn)“漏掉”或“亂序”的情況。
break/continue 慎用: 太多跳轉(zhuǎn)會讓代碼變得難以理解。
性能要考慮: 大數(shù)據(jù)量時,可以考慮用生成器表達(dá)式來節(jié)省內(nèi)存。
選擇合適的循環(huán): 確定要遍歷序列?用 for。 不確定次數(shù)?用 while。
九、寫在最后
Python 的 for 循環(huán),看似簡單,其實(shí)很強(qiáng)大。 它既能處理日常的小任務(wù)(比如遍歷列表),也能支撐復(fù)雜的數(shù)據(jù)處理(比如詞頻統(tǒng)計(jì))。
更重要的是,它讓代碼變得“直觀、干凈、易讀”。
記住一句話: ?? 當(dāng)你需要“遍歷”的時候,第一時間想起 for 循環(huán)。
?
閱讀原文:https://mp.weixin.qq.com/s/6je11d69VM97jiS8d8Uk6g
該文章在 2025/9/18 17:49:33 編輯過