しろちゃのプログラミング日記

プログラミング初心者が勉強したことを書き留めるブログ

Python関数紹介!!並行した反復処理 zip編

はじめに

この記事では、Pythonの反復処理に使われるzip関数について紹介します

なお、今回からPythonインタラクティブモードを主に使用していこうと思います

微妙に違いますが、ほとんど一緒です

print使わなくても出力されたりするところが違いといえば違いかな…

zipの記述方法

以下のように記述します

zip(シーケンスA, シーケンスB)

シーケンスとは、連続した何かのことです

リスト、タプル、文字列、整数…etc.

連続してればなんでもオッケーってことですね


実行すると、シーケンスAとシーケンスBが並行処理されます

並行処理するシーケンスは、必要とするだけいくらでも増やせます

3つでも4つでも10000個でも好きなだけ並行処理してください

メモリが不足でクラッシュしたら自己責任でお願いします

>>>Japanese = '赤', '青', '黄色'
>>>English = 'red', 'blue', 'yellow'
>>>list(zip(Japanese,English))
[('赤', 'red'), ('青', 'blue'), ('黄色', 'yellow')]

こんな感じです


また、並行処理するシーケンスの大きさ(=値の数)が異なる場合は

最も小さいものが全て処理されたときに繰り返しが終了します

先ほどの変数Englishに、ピンク色を加えてみます

>>>English = 'red', 'blue', 'yellow', 'pink'
>>>list(zip(Japanese,English))
 [('赤', 'red'), ('青', 'blue'), ('黄色', 'yellow')]

zip関数のデータ型

>>>type(zip(Japanese, English))
zip

これで結論は出たようなものですが、

zip関数で作られる値のデータ型はzip型となります

また、zip型はイテラブル(イテレータ*1に対応している)な値で、

反復処理するか、リスト型や辞書型に変換する必要があります

反復処理for...inでの利用

zip関数で返された値を反復処理したい場合は、以下のように記述して下さい

先の英語と日本語で記述したzip型のオブジェクトを並行処理してみます

>>>for iro, color in zip(Japanese, English):
           print(iro,color)
赤 red
青 blue
黄色 yellow

何の面白みもないですね(え)

さいごに

参考にした参考書の紹介記事です
ai-shirocha.hatenablog.com

*1:リスト、辞書などから要素を1つずつ取り出して返すもの