chain関数とはイテラブルをつなげて1つにするイテレータ関数です。「イテラブルって何?」という方は「【Python】繰り返し | イテラブル」の記事を最初に読むと理解が進みますのでまずはそちらを見てください。
chain関数と実装例
chain関数はイテラブルをつなげて一つのイテレータにします。['こんにちは','今晩は','おはようございます']というリストと['Hello','Good evening','Good morning']というリストをchainしてみます。
from itertools import chain
for s in chain(['こんにちは','今晩は','おはようございます'],['Hello','Good evening','Good morning']):
print(s)
実行結果
こんにちは 今晩は おはようございます Hello Good evening Good morning
リスト同士である必要ななく、以下のように異なる種類(リストとタプル、辞書など)もつなげることができます。
実装例
from itertools import chain
for s in chain(['こんにちは','今晩は','おはようございます'],('Hello','Good evening','Good morning'),{"朝":"おはよう","昼":"こんにちは","夜":"今晩は"}):
print(s)
実行結果
こんにちは 今晩は おはようございます Hello Good evening Good morning 朝 昼 夜
chain.from_iterable関数と実装例
chain.from_iterable()はイテレータ中の複数のイテレータを一つのイテレータにまとめる関数です。chain関数と異なり引数は1つということに注意してください。
['こんにちは','今晩は','おはようございます']というリスト(イテレータ)を使ってみます。この例ではリストの中にイテレータが3つ入っています。(文字列もイテラブルということに注意)
from itertools import chain
for s in chain.from_iterable(['こんにちは','今晩は','おはようございます']):
print(s)
実行結果
こ ん に ち は 今 晩 は お は よ う ご ざ い ま す
文字列もまとめて展開されました。
2次元イテレータの展開
chain.from_iterable関数を使うと2次元のイテレータ(リストなど)を1次元に展開することができます。
実装例
from itertools import chain
matrix=[
[11,12,13,14,15,16]
,[21,22,23,24,25,26]
,[31,32,33,34,35,36]
,[41,42,43,44,45,46]
]
print("展開前")
print(matrix)
l = [s for s in chain.from_iterable(matrix)]
print("展開後")
print(l)
展開前と後を比較しやすいように「l = [s for s in chain.from_iterable(matrix)]」
の部分は内包表記を使っています。内包表記については「【Python】内包表記」で説明していますのでそちらを見てください。
実行結果
展開前 [[11, 12, 13, 14, 15, 16], [21, 22, 23, 24, 25, 26], [31, 32, 33, 34, 35, 36], [41, 42, 43, 44, 45, 46]] 展開後 [11, 12, 13, 14, 15, 16, 21, 22, 23, 24, 25, 26, 31, 32, 33, 34, 35, 36, 41, 42, 43, 44, 45, 46]
2次元のリストが1次元に展開されているのがわかります。
まとめ
今回はchain関数とchain.from_iterable関数を扱いました。イテレータをつなげたり、展開したりする場合に必要になるので覚えておいてください。
この記事へのコメント
コメントはまだありません。
コメントを送る