2017-12-13 4 views
-2

私はそれが同じセマンティクスを持っていると思うこの次のコードでは、それは私のために別の結果を返します。私は式1でラムダ式x=3,false=(x< 3)で、xは、関数min()はに比べて上場aと戻り値に[、真真、偽、偽]の値を見つけることができるときだと思う私のオプションでラムダのmin関数がなぜ1つのパラメータを返すのでしょうか?

a=range(5) 

#expression 1 

b=min(a,key=lambda x:x<3) 

print(b) 

#output:3 

#expression 2 

c=[x for x in range(5) if x<3] 

print(c) 

#output:[0,1,2] 

x < 3が偽であるときの最初の値ですが、確かに正しくはありません。

+1

'key'は、afaikのフィル​​タリングの定義には使用されません。コレクションの要素にアクセスする方法を定義します。 – Carcigenicate

答えて

0

keyのパラメータがminのものではありません。

パラメータは次の例のように、あなたのiterable中の値を比較する方法を決定すること:

iterable = [{'name': 'Bert', 'age': 23, 'height': '175'}, 
      {'name': 'Harold', 'age': 47, 'height': '169'}] 
print min(iterable, key=lambda x: x['age']) #=> {'name': 'Bert', ...} 
print min(iterable, key=lambda x: x['height']) #=> {'name': 'Harold', ...} 

何ここであなたをトリップしているようだ、しかし、Pythonでブール値が同等であるということです。 False < True。つまり、min(a, key=lambda x: x<3)は、という要素を返します。x<3からの結果が最も小さいので、その式の値がFalseになる可能性があります。

関連する問題