[解決済み] Pythonのラムダ式で複数のステートメントを持つことは可能ですか?
質問
私はpythonの初心者で、以下のことを達成しようとしています。
私はリストのリストを持っています。
lst = [[567,345,234],[253,465,756, 2345],[333,777,111, 555]]
lst を、各サブリストから 2 番目に小さい数字だけを含む別のリストにマップしたい。したがって、結果は次のようになるはずです。
[345, 465, 333]
例えば一番小さい数字にだけ興味があれば、こうなります。
map(lambda x: min(x),lst)
こんなことできたらいいな。
map(lambda x: sort(x)[1],lst)
のようになりますが、sortは連鎖しません。(Noneを返す)
も、このようなことは許されません。
map(lambda x: sort(x); x[1],lst) #hence the multiple statement question
pythonのmapでこれをやる方法はないでしょうか。 という名前の関数を定義することなく ? (例えば、rubyの匿名ブロックでは簡単です)
どのように解決するのですか?
具体的な質問から、より一般的な問題まで、いくつかの異なる回答があります。つまり、最も具体的なものから最も一般的なものまでということです。
Q. lambdaの中に複数の文を入れることは可能でしょうか?
A.
いいえ。しかし、実際にはラムダを使う必要はありません。 あなたはステートメントを
def
の代わりに、すなわち
def second_lowest(l):
l.sort()
return l[1]
map(second_lowest, lst)
Q. lambdaからリストをソートして2番目に低い項目を得ることができますか?
A.
はい。 として
アレックスの回答
が指摘しているように
sorted()
は、その場でソートするのではなく、新しいリストを作成するソートのバージョンで、連鎖させることができます。 これはおそらくあなたが使用すべきものであることに注意してください - あなたのマップが元のリストに副作用を与えるのは悪い習慣です。
Q. 一連のリストの中で、各リストから2番目に小さい項目を取得するにはどうしたらよいでしょうか?
A.
sorted(l)[1]
は、実はこのための最良の方法ではありません。 O(N log(N))の複雑さを持ちますが、O(n)の解法が存在します。 これはheapqモジュールで見つけることができます。
>>> import heapq
>>> l = [5,2,6,8,3,5]
>>> heapq.nsmallest(l, 2)
[2, 3]
だから、使うだけでいい。
map(lambda x: heapq.nsmallest(x,2)[1], list_of_lists)
また、通常、ラムダを完全に回避するリスト内包を使用する方が明確であると考えられています。
[heapq.nsmallest(x,2)[1] for x in list_of_lists]
関連
-
python call matlab メソッドの詳細
-
[解決済み】「SyntaxError.Syntax」は何ですか?Missing parentheses in call to 'print'」はPythonでどういう意味ですか?
-
[解決済み] Pythonで "with open "を使って複数のファイルを開くにはどうしたらいいですか?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] Pythonにはクラス内に「プライベート」変数がある?
-
[解決済み] Pythonは順序集合を持つか?
-
[解決済み】Pythonで複数のコンストラクタを持つためのクリーンでPythonicな方法は何ですか?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み】RubyにあってPythonにないもの、またその逆は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python jiabaライブラリの使用方法について説明
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み】DataFrameのコンストラクタが正しく呼び出されない!エラー
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?