が誰かの意味に次のコード行の後ろの構文説明していただけます。違い - パイソン - 構文の説明
を私はそれが2つのリストの違いを見つけるためだ理解が、「Xを何'ここに表現する?比較されるリスト内の個々の要素はどれですか? temp1
とs
はリストであることを理解しています。また、x for x
は同じ変数を持つ必要がありますか?x for y
でもかまいませんか?
が誰かの意味に次のコード行の後ろの構文説明していただけます。違い - パイソン - 構文の説明
を私はそれが2つのリストの違いを見つけるためだ理解が、「Xを何'ここに表現する?比較されるリスト内の個々の要素はどれですか? temp1
とs
はリストであることを理解しています。また、x for x
は同じ変数を持つ必要がありますか?x for y
でもかまいませんか?
それはtemp3
に含める前s
にないかどうかを確認するためにtemp1
をチェックして、各要素を反復処理します。
それはtemp1
とs
は、あなたが比較されている2つのリストです
temp3 = []
for item in temp1:
if item not in s:
temp3.append(item)
を書いて短く、より神託の方法です。
あなたの2番目の質問については、x for y
はうまくいくでしょうが、意図した通りではないでしょうし、確かに非常に有用な方法ではありません。 temp1
の各項目を変数名y
に割り当て、リスト内包範囲外の範囲でx
を検索します。 x
が前に定義されていると仮定すると(そうでなければNameError
などが得られます)、条件if x not in s
はtemp1
のすべての項目について同じことが評価されます。そしてその条件が真であれば、temp3
にはx
が設定されます。 y
の値は未使用です。
これは、リスト内包で異なる変数を使用することは決して役に立たないと言ってはいけません。実際に[a if condition(x) else b for x in original_sequence]
のようなリストの理解は、しばしば非常に便利です。 [a for x in original_sequence if condition(x)]
のようなリストの理解は、original_sequence
の項目の数がcondition()
を満たす項目の数と同じ数のa
を含むリストを作成するのにも役立ちます。
Xは同じ変数であり、yではありません。それはとてもx for x
コード
newList = []
for x in temp1:
if x not in s:
newList.append(x)
以下と同じように動作し、ここで最初のTEMP1におけるxのと同じであるために後に内部コードとXに追加されたXです。
は自分で試してみてください。
arr = [1,2,3]
[x+5 for x in arr]
これはあなたを与える必要がある[6、7、8] [1,2,3]リストプラス5.この構文上の値であること(リスト内包として知られていますまたはマッピング)。これは、同じ命令をリストのすべての要素に適用します。これを行うと同じようになります:あなたは右に左に全部を読むことができるように
for x in arr:
arr += 5
[x for x in temp1 if x not in s]
それは、わずかにする再ためにそれを助けるかもしれません。最初にx
を最後まで移動しましょう。
[for x in temp1 if x not in s yield x]
それが英語として自然に読み込むので、私は偽物yield
キーワードを追加しました。コロンを追加すると、コロンがいっそう明確になります。
[for x in temp1: if x not in s: yield x]
本当に、これは物事がで評価を受けることに順序がある。x
変数がfor
ループから来て、あなたがif
とyield
句で参照できる理由です。しかし、リスト内包表記が書かれている方法は、値を前に出すことです。つまり、まだ定義されていない変数名を使用することになります。
実際、この最終的な書き換えは、明示的なジェネレータ関数を書く方法とまったく同じです。
def func(temp1, s):
for x in temp1:
if x not in s:
yield x
あなたがリストに発電機と同等の取得func(temp1, s)
呼び出した場合。 list(func(temp1, s))
でそのリストにすることができます。
https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions – niemmi