Python言語の本質:Itertoolsライブラリ

序文

PythonのItertoolsライブラリがPythonの宝石と見なされていることをご存知ですか?一部のユーザーは、これを最もクールで最もすばらしいPythonライブラリの1つとさえ考えています。 Itertoolsモジュールを使用して、アプリケーションを充実させ、信頼性の高い実用的なソリューションを短時間で作成できます。

この記事は、読者がプロジェクトでItertoolsモジュールを使用する方法を理解するのに役立ちます。

この記事は3つのパートに分かれており、各パートでItertoolsライブラリの特定の機能について説明します。具体的には:

  1. 無限イテレーター
  2. イテレーターを終了します
  3. 複合イテレーター

コンセプト紹介

イテレーターとは

イテレーターは、__ next__メソッドで構成されるオブジェクトです。ステータスがあります。状態は、反復中の実行を記憶するために使用されます。したがって、イテレータは現在の状態を認識しているため、メモリ効率が高くなります。これが、メモリ効率が高く高速なアプリケーションでイテレータが使用される理由です。

無制限のデータストリーム(ファイルの読み取りなど)を開いて、次のアイテム(ファイルの次の行など)を取得できます。次に、プロジェクトで操作を実行して、次のプロジェクトに進むことができます。これは、現在のアイテムを知る必要があるだけなので、無限の数の要素を返すイテレーターを持つことができることを意味する場合があります。

次に返すアイテムがない場合、イテレーターはStopIteration例外を発生させます。

反復可能とは何ですか?

Iterableは、イテレーターを返すことができるオブジェクトです。イテレーターを返す__iter__メソッドがあります。 Iterableは、ループしてiter()を呼び出すことができるオブジェクトでもあります。 __getitem__メソッドがあり、0から始まる連続したインデックスを取得できます(インデックスが無効になるとIndexErrorが発生します)。

Itertoolsとは

ItertoolsはPythonモジュールであり、Python3標準ライブラリの一部です。これにより、イテレーターで効率的なメモリおよび計算タスクを実行できます。これは、APL、Haskell、およびSMLの構築に触発されています。

基本的に、このモジュールには、純粋なPythonで簡潔かつ効率的にアプリケーションを構築するのに役立つ、高速でメモリ効率の高いメソッドが多数含まれています。

無限イテレーター

無限に等間隔の値を返すイテレーターを作成する場合はどうなりますか?または、イテレーターから要素ループを生成する必要がある場合はどうなりますか?または、イテレーターの要素を繰り返したい場合はどうなりますか?

itertoolsライブラリは、必要なすべての機能を実行するために使用できる一連の機能を提供します。

このセクションにリストされている3つの関数は、アイテムの無限のストリームになる可能性のあるイテレーターを作成して返します。

Count

例として、等距離の値の無限のシーケンスを生成できます。

start =10
stop =1
my_counter = it.count(start, stop)for i in my_counter:
 # this loop will run for ever
 print(i)

結果:

101112131415

Cycle

サイクルメソッドを使用して、入力から要素の無限ループを生成できます。

このメソッドの入力は、リスト、文字列、辞書などの反復可能なオブジェクトである必要があります。

my_cycle = it.cycle('Python')for i in my_cycle:print(i)

結果:

P
y
t
h
o
n
P
y
t
h
o
n
P

Repeat

アイテム(文字列やコレクションなど)を繰り返すには、repeat()関数を使用できます。

to_repeat ='FM'
how_many_times =4
my_repeater = it.repeat(to_repeat, how_many_times)for i in my_repeater:print(i)
# Prints
FM
FM
FM
FM

これにより、文字列「FM」が4回繰り返されます。 2番目のパラメーターを指定しない場合、この文字列が無期限に繰り返されます。

イテレーターを終了します

このセクションでは、終了反復の強力な機能について説明します。これらの関数は、次のような多くのシナリオで使用できます。

  1. 多くの反復がある可能性があり、シーケンス内のすべての反復要素に対して1つずつ操作を実行する必要があります。
  2. または、iterableの各要素で実行したい関数がたくさんある場合
  3. または、イテレーターから要素を削除してから、他の要素に対して操作を実行する場合もあります。

Chain

このメソッドを使用すると、要素がなくなるまで、シーケンスの入力反復ですべての要素を返すイテレーターを作成できます。したがって、連続シーケンスを単一シーケンスとして扱うことができます。

chain = it.chain([1,2,3],['a','b','c'],['End'])for i in chain:print(i)

結果

123
a
b
c
End

Drop While

iterableと条件を渡すことができます。このメソッドは、条件が要素に対してFalseを返すまで、各要素の条件の計算を開始します。要素の条件値がFalseになると、関数は残りの反復可能な要素を返します。

たとえば、ジョブリストがあり、要素を繰り返し処理して、条件が満たされない場合にのみ要素を返したいとします。条件の値がFalseになると、イテレーターの残りの要素が返されることを期待しています。

jobs =['job1','job2','job3','job10','job4','job5']
dropwhile = it.dropwhile(lambda x :len(x)==4, jobs)for i in dropwhile:print(i)

結果:

job10
job4
job5

このメソッドは、要素job10の長さが4文字に等しくないため、上記の3つの項目を返します。したがって、job10およびその他の要素が返されます。

Take While

このメソッドは、dropwhile()メソッドの反対です。基本的に、最初の条件がFalseを返すまで、iterableのすべての要素を返し、その後、他の要素を返しません。

たとえば、ジョブリストがあり、条件が満たされない場合はすぐにジョブに戻るのを停止したいとします。

jobs =['job1','job2','job3','job10','job4','job5']
takewhile = it.takewhile(lambda x :len(x)==4, jobs)for i in takewhile:print(i)

結果:

job1
job2
job3

GroupBy

この関数は、反復可能な連続する要素をグループ化した後、反復子を構築します。この関数は、キーと値のペアのイテレーターを返します。ここで、キーはグループキーであり、値はキーによってグループ化された連続する要素のコレクションです。

次のコードスニペットについて考えてみます。

iterable ='FFFAARRHHHAADDMMAAALLIIKKK'
my_groupby = it.groupby(iterable)for key, group in my_groupby:print('Key:', key)print('Group:',list(group))

group属性は反復可能であるため、リストとして具体化します。

したがって、これは印刷されます:

Key: F
Group:[‘F’, ‘F’, ‘F’]
Key: A
Group:[‘A’, ‘A’]
Key: R
Group:[‘R’, ‘R’]
Key: H
Group:[‘H’, ‘H’, ‘H’]
Key: A
Group:[‘A’, ‘A’]
Key: D
Group:[‘D’, ‘D’]
Key: M
Group:[‘M’, ‘M’]
Key: A
Group:[‘A’, ‘A’, ‘A’]
Key: L
Group:[‘L’, ‘L’]
Key: I
Group:[‘I’, ‘I’]
Key: K
Group:[‘K’, ‘K’, ‘K’]

Tee

このメソッドは、反復を分割し、入力から新しい反復を生成できます。出力はイテレーターでもあり、指定された数のアイテムのイテラブル値を返します。それをよりよく理解するために、次のコードスニペットを参照してください。

iterable ='FM'
tee = it.tee(iterable,5)for i in tee:print(list(i))

このメソッドは、反復可能なFM全体を5回返します。

[ ‘F’, ‘M’][‘F’, ‘M’][‘F’, ‘M’][‘F’, ‘M’][‘F’, ‘M’]

コンビネーションイテレーター

Permutations

置換メソッドを使用することにより、入力イテラブル内の要素の連続配置を返すイテレータを作成できます。

配置の長さを指定するパラメーターを渡すことができます。デフォルトでは、iterableの長さになります。

これは、長さが欠落している場合、メソッドがすべての可能な完全長の順列を生成することを意味します。

iterable ='FM1'
length =2
permutations = it.permutations(iterable, length)for i in permutations:print(i)

結果

( ‘F’, ‘M’, ‘1’)(‘F’, ‘1’, ‘M’)(‘M’, ‘F’, ‘1’)(‘M’, ‘1’, ‘F’)(‘1’, ‘F’, ‘M’)(‘1’, ‘M’, ‘F’)

長さが2の場合、次のように生成されます。

( ‘F’, ‘M’)(‘F’, ‘1’)(‘M’, ‘F’)(‘M’, ‘1’)(‘1’, ‘F’)(‘1’, ‘M’)(‘F’, ‘M’)(‘F’, ‘1’)(‘M’, ‘1’)

Combinations

最後に、反復可能オブジェクトの組み合わせを生成する方法について説明します。

イテレーターが与えられると、与えられた長さの要素のサブシーケンスを返すイテレーターを構築できます。

それらの位置に応じて、要素は一意であると見なされ、異なる要素のみが返されます。

iterable ='FM1'
combinations = it.combinations(iterable,2)for i in combinations:print(i)

結果

( ‘F’, ‘M’)(‘F’, ‘1’)(‘M’, ‘1’)

·END·

Recommended Posts

Python言語の本質:Itertoolsライブラリ
python言語の利点は何ですか
pythonインポートライブラリの特定の方法
Python(7)の基盤を統合する
エンタープライズ言語に対するpythonの利点は何ですか
Python(6)の基盤を統合する
Pythonの基盤を統合する(3)
pythonでのwheelの使用法
Pythonは中国語の4つの車輪を処理します
地主取引のPythonシミュレーション
Pythonの用途は何ですか
Python文字列プーリングの前提
Python3.8の新機能の秘密
Pythonの父がMicrosoftに加わる
python accesshdfsの操作
pythonでのタプルの使用法
pythonを実行するメソッドを終了します
Pythonタートルライブラリ実装の基本的な分析
pythonでのrbの意味を理解する
Pythonはスタックの構造を実装できますか?
pythonの必須パラメーターは何ですか
pythonの下部にあるロジスティック回帰
Python3クローラーでのAjaxの使用
PythonはTowerofHanoiゲームを解決します
pythonの複数のバージョンの競合を解決します
python変数の範囲は何ですか
Pythonは分数シーケンスの合計を実装します
Pythonの基礎を学ぶ2日間
pythonのid関数は何ですか
python標準ライブラリのglobの分析
python3のピップパスはどこにありますか
pythonインスタンス化オブジェクトの特定のメソッド
Python初心者はライブラリの使い方を学びます
python3はマスク描画の機能を実現します
python開発の見通しは何ですか
pythonの関数本体は何ですか
pythonの複数のバージョンの競合を解決します
Pythonでのpipの使用に関する詳細な説明|サードパーティライブラリのインストールの概要
pythonでのadbの機能は何ですか
Python super()メソッドの原理の詳細な説明
javaとpythonの構文の違い
Python3.9の7つの機能
Pythonは学生管理システムの開発を実現します
python標準ライブラリOSモジュールの詳細な説明
PythonはDoudizhuでカードのシャッフルを実装します
pythonでのリストの意味と使用法
python辞書の値を変更できますか?
Pythonはスネークゲームのソースコードを実装しています
Pythondecimalモジュールの使用法の詳細な説明
Python操作の一般的なメソッドの分析Jiraライブラリ
27歳でパイソンを学ぶのはどうですか?
2.3Python言語の基盤
2.1 Pythonインタープリター(pythonインタープリター)
ubuntuでpythonをアンインストールした結果、非常に
Pythonは釣りマスターのゲーム実装を書きます
[898] pythonは2つのリストの共通部分を取得します|ユニオン|違い
Python関数パラメータ分類の原理の詳細な説明
Python2とPython3の違いの簡単な要約
Pythonタイマースレッドプールの原理の詳細な説明
Ubuntuの言語を中国語に変換する方法は? ?
pythonのコンパイルとsslのインストールの問題を解決します