Python でのリスト内包表記と生成された式

WBOY
リリース: 2016-06-16 08:47:16
オリジナル
1123 人が閲覧しました
リスト内包表記

新しいリストを作成するのではなくリストを変更する必要がある場合は、リスト内包表記を使用できます。リスト分析式は次のとおりです:

[expr for iter_var in iterable] [expr for iter_var in iterable if cond_expr]
最初の構文: 最初に iterable 内のすべての内容を反復し、各反復で put iterable Put the iter_var の対応する内容を取得し、式に iter_var の内容を適用し、最後に式の計算値を使用してリストを生成します。
2 番目の構文: 条件を満たす内容のみを iter_var の反復可能な対応する内容に入れ、式に iter_var の内容を適用し、最後にリストを生成します。式の計算値。

例:
コードをコピーします コードは次のとおりです:

>>> ;> L= [(x+1,y+1) for x in range(3) for y for range(5)]
>>>L
[(1) 、1)、(1、2)、(1、3)、(1、4)、(1、5)、(2、1)、(2、2)、(2、3)、(2、4) ), (2 , 5), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5)]
>>> N=[ range(10) の x に対して x+10 if x>5]
>>[16, 17, 18, 19]


ジェネレーター式
ジェネレーター式は Python2.4 で導入されました。シーケンスが長すぎて、一度に 1 つの要素のみを取得する必要がある場合は、リスト解析の代わりにジェネレーター式の使用を検討する必要があります。ジェネレーター式の構文は、次のようにジェネレーター式が [] ではなく () で囲まれていることを除いて、リスト分析と同じです:

コードをコピーコードは次のとおりです。
(iterable の iter_var の式)
(cond_expr の場合、iter_var の式)

例:

コードをコピー コードは次のとおりです:
>>> L= (i + 1 for i in range(10) if i % 2)
>>> L

>>> for i in L :
... L1.append(i)
...
>>> L1
[2, 4, 6, 8, 10]


ジェネレーター式は実際には数値のリストを作成しませんが、計算されるたびに項目を「生成」するジェネレーターを返します。 ジェネレーター式は「遅延評価」(「遅延評価」とも訳されますが、need メソッドによるこの呼び出しは遅延と訳したほうが良いと思います)を使用し、取得(評価)時にのみ割り当てられるため、メモリを使用する方が効率的です。リストは比較的長いです。 Python のジェネレーター オブジェクトは、遅延リストのようなものです。
いくつかの注意事項:

1. ループを実行する必要がある場合。リスト分析の代わりにループを使用してみてください。これは、Python が提唱する直観性により一致します。


コードをコピー コードは次のとおりです: シーケンス内の項目:
process(item)


2. より直接的な方法で実装できる組み込みの操作または型がある場合は、リスト内包表記を使用しないでください。
たとえば、リストをコピーする場合は、L1=list(L) を使用するだけです。


コードをコピー コードは次のとおりです。 L1=[x for x in L]

3. 各要素を呼び出して結果を返す必要がある場合は、次のようにする必要があります。 L1=[f(x) for x in L] の代わりに L1=map(f,L ) を使用します。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート