pythonリストの導出と生成器の表現の使用
シーケンス
シーケンスとは、データのセットを指し、格納タイプによって容器のシーケンスと平たいシーケンスに分けられ、変更されたかどうかによって可変のシーケンスと可変のシーケンスに分けられます。
容器系列と平たい系列
コンテナシーケンスは、リスト、tuple、collection.dequeを含むオブジェクトの参照を格納する。
フラットシーケンスは、str、bytes、bytearray、memoryview、array.arrayを含むオブジェクトの値を格納します。
フラットシーケンスの値は文字、バイト、数値という基本的なタイプです。
非可変シーケンスと可変シーケンス
可変シーケンスではなく、tuple、str、bytesを含みます。
可変シーケンスは、list、bytearray、array、collection.deque、memoryviewを含む。
次の図の左側は親類で、右側はサブクラスです。可変シーケンスは可変シーケンスから継承されないことが分かります。可変方法を拡張しました。
リストの導出
Python言語の魅力は簡潔さにあり、これは最も一般的な作成リストから反映されます。例えば、文字列「a b c」を新しいリスト「a」「b」「c」に変換したいです。
編纂効率も閲読性も、リスト導出がより優れており、リスト構築のショートカットといえる。ただし、濫用してはいけません。共通の原則は、リストから導き出されたコードが2行を超えたら、アプリを使うことを考えます。これは規定ではなく、完全に自分の好みで選ぶことができます。
デカルト積とは、複数のシーケンスの中の要素のすべての組み合わせを指します。リストで導いてデカルト積を実現します。
この行のコードには2つのforサイクルがあります。
一般的にジェネレータに接触するときは、
文法は似ていますが、本質的には大きな違いがあります。ジェネレータ式でデカルト積を実現してみます。どのような変化があるか見てください。
ジェネレータ表式の結果を繰り返して出力します。
yieldの役割はreturnと同じです。後から話します。
Tips
この小節の内容は『流暢なPython』を見た時に記録した知識点です。 Python標準ライブラリ用Cは、豊富なシーケンスタイプを実現しています。 リスト導出とは、 生成器表現は、リスト外の他のタイプのシーケンスを生成するために使用され、リスト導出との違いは、四角括弧を円括弧に変換するだけであり、
結び目
本論文ではまずシーケンスの概念を紹介し,次いでPythonの一般的な乱れ動作――リスト導出を実証し,最後に,生成器式という一見複雑で簡単な文法を引き出した。リストは可変です。可変の双子の兄弟がいます。元のグループです。
参考資料:
『流暢なPython』
以上がpythonリストの導出と生成器表現の使用の詳細です。pythonリストの導出とジェネレータ表現に関する詳細は他の関連記事に注目してください。
シーケンスとは、データのセットを指し、格納タイプによって容器のシーケンスと平たいシーケンスに分けられ、変更されたかどうかによって可変のシーケンスと可変のシーケンスに分けられます。
容器系列と平たい系列
コンテナシーケンスは、リスト、tuple、collection.dequeを含むオブジェクトの参照を格納する。
フラットシーケンスは、str、bytes、bytearray、memoryview、array.arrayを含むオブジェクトの値を格納します。
フラットシーケンスの値は文字、バイト、数値という基本的なタイプです。
非可変シーケンスと可変シーケンス
可変シーケンスではなく、tuple、str、bytesを含みます。
可変シーケンスは、list、bytearray、array、collection.deque、memoryviewを含む。
次の図の左側は親類で、右側はサブクラスです。可変シーケンスは可変シーケンスから継承されないことが分かります。可変方法を拡張しました。
リストの導出
Python言語の魅力は簡潔さにあり、これは最も一般的な作成リストから反映されます。例えば、文字列「a b c」を新しいリスト「a」「b」「c」に変換したいです。
symbols = "abc"
codes = []
for symbol in symbols:
codes.append(symbol)
print(codes) # ["a", "b", "c"]
forループとリストアプリの方法を使いました。実際にはapped方法を使わなくてもいいです。直接:
symbols = "abc"
codes = [symbol for symbol in symbols]
これをリストガイドと呼び、さらにPythonicの書き方です。編纂効率も閲読性も、リスト導出がより優れており、リスト構築のショートカットといえる。ただし、濫用してはいけません。共通の原則は、リストから導き出されたコードが2行を超えたら、アプリを使うことを考えます。これは規定ではなく、完全に自分の好みで選ぶことができます。
デカルト積とは、複数のシーケンスの中の要素のすべての組み合わせを指します。リストで導いてデカルト積を実現します。
colors = ["black", "white"]
sizes = ["S", "M", "L"]
tshirts = [(color, size) for color in colors for size in sizes]
一行のコードができました。Life is shot、use Python、list coprehension is wonderful、amzing。この行のコードには2つのforサイクルがあります。
for color in colors:
for size in sizes:
運転結果は:
[('black', 'S'), ('black', 'M'), ('black', 'L'), ('white', 'S'), ('white', 'M'), ('white', 'L')]
もし順番を変えたら:
[(color, size) for color in colors for size in sizes]
等価:
for size in sizes:
for color in colors:
運転結果は違っています。2番目の要素を観察します。
[('black', 'S'), ('white', 'S'), ('black', 'M'), ('white', 'M'), ('black', 'L'), ('white', 'L')]
ジェネレータ式一般的にジェネレータに接触するときは、
yield
のキーワードを話しますが、複雑なように見えますが、簡単です。ジェネレータはリストガイドのように、他の種類のシーケンスを生成するためのものです。例えば、タプル:
symbols = "abc"
codes = (symbol for symbol in symbols)
その文法はとても簡単で、リストから導いた中かっこ[]を小かっこ()に置き換えればいいです。文法は似ていますが、本質的には大きな違いがあります。ジェネレータ式でデカルト積を実現してみます。どのような変化があるか見てください。
colors = ["black", "white"]
sizes = ["S", "M", "L"]
tshirts = ((color, size) for color in colors for size in sizes)
運転結果は:
<generator object <genexpr> at 0x000001FD57D2DB30>
generator objectは、結果としてジェネレータオブジェクトです。ここでの結果は、繰り返しのたびに要素を一つずつ作り出すので、作成済みのタプルではありません。リストの導出によって、新しいリストのすべての要素が一気に生成されます。ジェネレータ表式の結果を繰り返して出力します。
for tshirt in tshirts:
print(tshirt)
('black', 'S')
('white', 'S')
('black', 'M')
('white', 'M')
('black', 'L')
('white', 'L')
ジェネレータ表式は、プログラムの性能を向上させます。例えば、2つの要素がそれぞれ1000個あるリストのデカルト積を計算します。ジェネレータ式は、forループを実行するオーバーヘッドを省きます。つまり、100万個の要素を含むリストです。yieldの役割はreturnと同じです。後から話します。
Tips
この小節の内容は『流暢なPython』を見た時に記録した知識点です。
a = [x for x in something]
という書き方を指す。b = tuple(x for x in something)
のように。array.array('I', x for x in something)
、array構造方法の最初のパラメータは、配列内の数字の記憶方式を指定している。for tshirt in [c, s for c in colors for s in sizes]
、リスト導出はこのリストを一度に生成し、メモリに記憶し、リソースを占用する。for tshirt in ('%s %s' for c in colors for s in sizes)
、生成器式は循環時に要素を一つずつ出力し、余分なメモリ占有を回避し、forサイクルを実行するオーバーヘッドを省きました。本論文ではまずシーケンスの概念を紹介し,次いでPythonの一般的な乱れ動作――リスト導出を実証し,最後に,生成器式という一見複雑で簡単な文法を引き出した。リストは可変です。可変の双子の兄弟がいます。元のグループです。
参考資料:
『流暢なPython』
以上がpythonリストの導出と生成器表現の使用の詳細です。pythonリストの導出とジェネレータ表現に関する詳細は他の関連記事に注目してください。