>>> ;> 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 ) を使用します。