2017-08-19 4 views
1

min()max()は、リストのソートとスライスを数値で使用したいと考えています。 sorted()機能で は、エレガントな解決策があります。リストでの.sort()メソッドとスライスを使った単一式

maximum = lambda arr: sorted(arr)[-1] 

または

def maximum(arr): 
    return sorted(arr)[-1] 

しかし、私はより多くのメモリ効率的 .sort()方法でエレガントなソリューションを実現したい場合、私はボトルネックにいますよ。

.sort()は、新しいリストを作成せずに、並べ替え、ひいてはなしを返していない、ので、私は唯一のワンライナーは、次のとおりです。

def maximum(arr): 
    return arr[-1] if arr.sort() == None else "Huston, we found a bug!" 

これは非常にニシキヘビではありません。 .sort()とスライスを使用して、単一かつエレガントな表現のための方法はありますか?

+3

これはちょうど「楽しみ」ですが、リストをソートするのはO(n * log(n))ですが、minやmaxを見つける典型的なアルゴリズムはO(n)です。また、 '.sort'を使用すると' '最大値 ''が破壊的な操作になります。これは大きな欠点のようです。最後に、「Pythonic」の方法はしばしば1ライナーを避けることです。 :-) – smarx

+2

pythonicの方法は、組み込みのmin関数とmax関数を使うことです。あなたはそれをやってくれるのですか? – Philipp

+0

これはコードワードのチャレンジからのものです。 min()とmax()という名前の関数が定義されています。再帰を避けるために、別のものを使うべきです。 –

答えて

0

私は心をこめてJ.Doeが言ったことに同意していますが、ワンライナーを主張するならば、これは少し良くなります

def maximum(arr): 
    return arr.sort() or arr[-1] 

.sort()戻りNoneNoneはブール値でFalseと評価されているのでコンテキストでは、これは常に動作します。

0

あなたが望むものを1行で達成する方法はおそらくありますが、pythonicではありません。私は興味深いことに、min()またはmax()を使用するともっとpythonicのアプローチだと思います。より速く、よりシンプルで読みやすいだけではないためです。

あなたのPythonインタプリタでimport thisを入力する場合は、「ティム・ピーターズによって、パイソンの禅」を参照してくださいだろうと、それは次のように述べた。

シンプルは、複雑よりも優れています。

読みやすカウントします。

関連する問題