2017-03-02 4 views
-2

質問に対する回答として与えられた推奨式は How to find the smallest closest number in a list in pythonでした。 しかし、私はそれを実行しようとしたときに私は期待していなかった何かが起こった。min(list_1、key = func)を使用したPython式で、指定された数値より小さいリストの中で最大の数値を返します

list_of_numbers = [4, 9, 15, 25]

number = 20

と表現:予想通り、私が得た

min(list_of_numbers, key=lambda x: (abs(x - number), x))

は、私はリストと上記の質問から数、すなわちを使用しました番号15

私は番号を変更したときただし、:

number = 91 

list_new = [] for i in range(4,98,4): list_new.append(i)

min(list_of_numbers, key=lambda x: (abs(x - number), x)) 

list_newは次のとおりです。

[4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96] 

それが何が起こったのかと一致するので、だから私は、88の答えを期待しかし、私は元の質問をしようとしたが、私は92を取得し続ける。

私が間違った質問と回答を見て、それから始めるなら、私の質問が求めている答えへの参考に感謝します。

私はこれをPython 3.6で実行しています。

+0

91は88より92に近いがそれは私はあなたが二番目に相当するとして、あなたの最初の結果をどう解釈するかわからないので、算術的に最も近い番号を検索します。どちらの場合も同じことが起こりました。式は、複数の等しく近いものがある場合、リストの最初の数値を返します。しかし、それはあなたの2番目の例では起こりません。 – pvg

+0

その場合、私は間違った答えを見たかもしれません。指定された番号よりも小さいリストの中で最大の番号を取得する方法についての提案がありますか?それは私が最初に答えを探していた質問です。好ましくはmin()を使います。 – YaoS

答えて

1

このコードでは、絶対値を使用しているため、に最も近い数字がであることがわかります。

あなただけのリスト内包のintsteadを使用することを検討するかもしれない:

>>> L = range(4,98,4) 
>>> number = 91 
>>> max([n for n in L if n < number]) 
88 
+1

あなたは内側のリストを取り除き、ちょうどgenのexpを使うことができます – acushner

+0

ありがとうございます。これは私が探していたものです。 – YaoS

0

あなたは、例えば、あなたのキーの機能が非対称にする必要がありもし条件使用して:

max(list_of_numbers, key=lambda x:x if x < number else -1e99) 
+0

ありがとうございます。これも機能します。 – YaoS

関連する問題