itertools.chain 是 python 中用于連接多個可迭代對象的工具,返回一個按需生成元素的迭代器。它有兩種主要用法:1. chain(iterable1, iterable2, …) 可依次連接多個可迭代對象,適用于合并多個列表或字符串;2. chain.from_iterable(iterable_of_iterables) 用于展平嵌套結構,如二維列表。常見應用場景包括處理日志文件、組合不同來源的數據以及減少數據拷貝。使用時需注意 chain 返回的是單次迭代器,無法重復遍歷,且 from_iterable 要求每個元素都必須是可迭代的。
在 python 的 itertools 模塊中,chain 是一個非常實用的工具,用來將多個可迭代對象連接在一起,形成一個連續的迭代器。它不會一次性把所有數據加載到內存中,而是按需生成元素,非常適合處理大體量的數據。
什么是 itertools.chain
itertools.chain 的作用是將多個可迭代對象(比如列表、元組、字符串等)依次連接起來,返回一個可以逐個訪問這些元素的迭代器。它不改變原始數據,也不會復制數據,只是“按順序讀取”的一種方式。
使用方式主要有兩種:
- chain(iterable1, iterable2, …):直接傳入多個可迭代對象
- chain.from_iterable(iterable_of_iterables):傳入一個包含多個可迭代對象的可迭代對象(比如列表的列表)
常見用法與示例
合并多個列表或字符串
這是最基礎的用法。如果你有幾個列表或者字符串,想一個個地遍歷,而不是嵌套循環,就可以用 chain。
立即學習“Python免費學習筆記(深入)”;
from itertools import chain list1 = [1, 2, 3] list2 = ['a', 'b', 'c'] result = chain(list1, list2) for item in result: print(item)
輸出:
1 2 3 a b c
這種方式比先合并成一個新列表再遍歷更節省內存,尤其是處理大列表時。
使用 from_iterable 展開嵌套結構
當你有一個嵌套結構,比如二維列表,想要把它展平成一維來遍歷,這時候可以用 chain.from_iterable()。
nested_list = [[1, 2], [3, 4], [5]] flattened = chain.from_iterable(nested_list) print(list(flattened)) # 輸出: [1, 2, 3, 4, 5]
這個方法在處理 json 數據、網頁爬蟲結果等嵌套結構時非常有用。
在實際項目中的應用建議
- 處理日志文件:如果你有多個日志文件,每個文件一行行記錄,可以用 chain 把它們串起來統一處理。
- 組合不同來源的數據:比如從數據庫、API 和本地緩存各取出一部分數據,可以用 chain 把它們拼接后統一分析。
- 減少不必要的拷貝:比起用 + 運算符合并兩個列表,chain 更高效,特別是當數據量大的時候。
一些注意事項:
- chain 返回的是一個迭代器,不是列表,不能重復遍歷。
- 如果你需要多次使用結果,記得轉成列表保存下來。
- from_iterable 要求輸入的每個元素都必須是可迭代的,否則會報錯。
基本上就這些。掌握好 itertools.chain 可以讓你在處理多個序列時更加靈活和高效。