1. ホーム
  2. python

[解決済み] Pythonのfor-inループは変数が先行する

2022-03-01 02:25:25

質問

foo = [x for x in bar if x.occupants > 1]

ググってみても、ここで検索しても、これが何をするものなのか分かりませんでした。 多分、正しいものを検索していなかったのでしょうが、ここにあります。 この略語を否定する意見があれば、ぜひお願いします。

どのように解決するのですか?

現在の回答は良いが、それらがどのようにちょうどであるかについて話をしないでください。 構文解析 私たちが慣れ親しんでいるあるパターンに

例えば、10個の数字があり、その中から例えば5より大きい数字の部分集合を求めるとします。

>>> numbers = [12, 34, 1, 4, 4, 67, 37, 9, 0, 81]

上記のタスクに対して、以下のアプローチは互いに全く同じで、最も冗長なものから、簡潔で読みやすいもの、そして パイソン :

アプローチ1

result = []
for index in range(len(numbers)):
    if numbers[index] > 5:
        result.append(numbers[index])
print result  #Prints [12, 34, 67, 37, 9, 81]

アプローチ2(少しスッキリ、フォーインループ)

result = []
for number in numbers:
    if number > 5:
        result.append(number)
print result  #Prints [12, 34, 67, 37, 9, 81]

アプローチ3(エンターリスト理解)

result = [number for number in numbers if number > 5]

とか、もっと一般的な

[function(number) for number in numbers if condition(number)]

のところです。

  • function(x)x を使用して、それを有用なものに変換します (たとえば、次のようなものです。 x*x )
  • もし condition(x) が False-y 値 (False, None, 空文字列、空リストなど) を返した場合、現在の反復処理はスキップされます (たとえば、次のように考えます)。 continue ). もし関数が偽でない値を返したら、現在の値が最終的な結果配列に入ります(そして、上記の変換ステップを通過します)。

この構文を少し違った形で理解するために、以下のボーナスセクションをご覧ください。

さらに詳しい情報は、他のすべての回答者がリンクしているチュートリアルを参照してください。 リスト理解度


ボーナス

(少し韻を踏んでいないが、念のためここに書いておく)

上の例は、次のように書くことができる。

result = filter(lambda x: x > 5, numbers)

上記の一般式は、次のように書くことができる。

result = map(function, filter(condition, numbers)) #result is a list in Py2