Python 的 for 迴圈最佳實踐
本文說明了 Python 的 for 迴圈最佳實踐。
YouTube Video
Python for 迴圈的最佳實踐
在 Python 中,for 迴圈是一種強大的工具,用於遍歷多個元素的集合。在這裡,我們將深入探討 Python for 迴圈的標準用法並探索最佳實踐。我們將包括實用的程式碼範例、常見問題以及保持程式碼效率的技巧。
基本的 for 迴圈
Python 的基本 for 迴圈相對簡單。例如,您可以按以下方式逐一輸出清單的元素:。
1fruits = ["apple", "banana", "cherry"]
2for fruit in fruits:
3 print(fruit)- 上述程式碼按順序輸出「apple」、「banana」和「cherry」元素。
迴圈語法
這是一個相對簡單的範例程式碼,但 for 迴圈可以實現更複雜的情境。例如,你可以使用 enumerate 或 zip 同時遍歷多個列表。
使用 enumerate
1fruits = ["apple", "banana", "cherry"]
2for index, fruit in enumerate(fruits):
3 print(f"{index}: {fruit}")- 使用
enumerate,你可以同時獲取索引和元素。
使用 zip
1names = ["Alice", "Bob", "Charlie"]
2ages = [25, 30, 35]
3for name, age in zip(names, ages):
4 print(f"{name} is {age} years old.")- 使用
zip,你可以同時遍歷多個列表。
清單特性與邊緣情況的處理
直接使用列表很方便,但是在處理大量數據時,使用清晰且高效的語法很重要。
清單推導式
例如,如果你想避免列表元素重複,可以使用 set 來防止重複輸出。
1items = ["apple", "banana", "apple", "cherry"]
2for item in set(items):
3 print(item)- 在這個例子中,使用了
set來處理重複的元素。
遍歷字典
遍歷字典時,可以使用 items() 方法來存取鍵和值。
1capitals = {"USA": "Washington, D.C.", "France": "Paris", "Japan": "Tokyo"}
2for country, capital in capitals.items():
3 print(f"The capital of {country} is {capital}.")- 這段程式碼會遍歷包含國家與其首都的字典的鍵和值,並將其輸出。
使用列表推導式
使用列表推導式可以讓程式碼更簡潔且易讀。在使用 for 迴圈創建新列表時,這非常有效。
1squares = [x**2 for x in range(10)]
2print(squares)- 這段程式碼使用列表生成式計算0到9的整數平方,並將結果儲存在一個列表中。
條件迴圈
通過添加條件,你可以在需要特定動作時,在迴圈內進行篩選或其他操作。
1numbers = [1, 2, 3, 4, 5]
2even_squares = [x**2 for x in numbers if x % 2 == 0]
3print(even_squares)- 這段程式碼使用列表生成式,僅對
numbers列表中的偶數求平方並儲存於新列表中。
使用 else
在 Python 中,你可以在迴圈中包含一個 else 子句。這僅在迴圈自然終止時執行,而沒有被 break 中斷。
1numbers = [1, 2, 3, 4, 5]
2search_for = 6
3
4for number in numbers:
5 if number == search_for:
6 print("Number found!")
7 break
8else:
9 print("Number not found.")- 在這段程式碼中,由於
search_for變量被賦值為6且不在列表裡,迴圈會執行到最後,然後顯示訊息Number not found。
在迴圈中修改列表時需小心
在 for 迴圈裡修改現有列表可能會導致非預期的行為或不可預測的結果。一般應避免進行這樣的操作。
最糟糕的情況示例
1numbers = [1, 2, 3, 4]
2for i in numbers:
3 numbers.append(i * 2) # Modify the list while iterating
4 if len(numbers) > 10:
5 break # Avoid infinite loop- 這可能會產生意外的結果,並且不是安全的程式碼。建議建立新列表或使用索引式迴圈來維持程式碼的穩定性。
選擇目標數據
通過在執行 for 迴圈時使用適當的數據結構,您可以提高效率。對於大型數據轉換,使用生成器,或者使用 itertools 來簡化處理是有效的。
生成器
1def generate_numbers():
2 for i in range(5):
3 yield i
4
5for number in generate_numbers():
6 print(number)- 通過使用這樣的生成器,您可以以流式處理的方式處理數據,而不是一次性加載所有數據。
itertools
1import itertools
2
3# Generate numbers starting from 0 infinitely (limited using takewhile)
4counter = itertools.count()
5
6# Output numbers from 0 to 4
7for number in itertools.takewhile(lambda x: x < 5, counter):
8 print(number)- 通過使用
itertools,你可以在保持控制的情況下高效處理像無限資料流這樣的資料。例如,如上所示,你可以用count()產生數值序列,並用takewhile()根據條件擷取資料。這讓你能以彈性且易讀的方式處理資料流,而無需明確指定終止條件。
結論
Python 的 for 迴圈可以處理廣泛的任務,從簡單的迴圈遍歷到複雜的數據轉換。然而,不當的使用可能會導致不必要的複雜性並降低效率。通過遵循這些最佳實踐,你可以寫出高效的程式碼,同時提升可維護性和可讀性。
您可以在我們的 YouTube 頻道上使用 Visual Studio Code 來跟隨上述文章一起學習。 請也查看我們的 YouTube 頻道。