2017-11-09 21 views
0

yrsの中で2013に最も近い要素(_tmp)を探したいと思います。Pythonリスト(Python 3.6)で数値に最も近い値を見つけよう

yrs = [2000.0, 2001.0, 2002.0, 2003.0, 2004.0, 2005.0, 2006.0, 2007.0, 2008.0, 2009.0, 2010.0, 2011.0, 2012.0, 2014.0, 2015.0, 2016.0] 
_tmp = 2013 
min(yrs, key=lambda x: abs(x - _tmp)) 

私はリスト内包して試してみたが、それはNameErrorをスローします。どのように私はこれを行うことができますか?多分、

+5

私にとってうまく機能します! –

+2

numpyを使用している場合は、2012年に吐き出されるyrs [np.abs(np.array(yrs) - _tmp).argmin()] 'を使用してください。 –

+0

インタープリタを再起動しようとしましたか?コードは正常に見えます。 – Eran

答えて

1

に最も近い値を見つけるための別の方法は、np.argminを使用します。

yrs[np.abs(np.array(yrs) - _tmp).argmin()] 

  • 変換yrsnumpy.ndarrayにすでに配列場合(スキップ)
  • broadcast subtract yrs
  • np.abs内のすべての要素から_tmpのイオンは、絶対値(我々は少なくとも絶対たい)
  • np.argminは仕事を終えるために
  • インデックスyrsに最小値のインデックスを見つけるを検索します。
0

私が述べたように数

yrs = [2000.0, 2001.0, 2002.0, 2003.0, 2004.0, 2005.0, 2006.0, 2007.0, 2008.0, 2009.0, 2010.0, 2011.0, 2012.0, 2014.0, 2015.0, 2016.0] 
yr = 2013 

# creates a list l, with the difference between input year and items in yrs 
# find the element having the minimum difference with the input element (yr) 
l = [abs(x-yr) for x in yrs] 
if l: 
    print(int(yrs[l.index(min(l))])) 

>>> 2012 
関連する問題