2017-08-09 85 views
1

分類Python的 - 得到最接近的整數給出一個整數列表簡譜

values = [7, 9, 10, 11] 

如果我想找到最接近值

value = 0 

我可以簡單地使用

closest_value = min(values, key=lambda x:abs(x-value)) 

並獲得

[out]: 7 

然而,在我的情況values相當於簡譜的整數,像這樣:

notation_values = {'C':0, 'C#':1, 'D':2, 'Eb':3, 'E':4, 'F':5, 'F#':6, 'G':7, 'Ab':8, 'A':9, 'Bb':10, 'B':11} 

在這種情況下,0接近11,因爲,12會,只有一個八度較高的是'C'一次。

根據這個邏輯我怎樣才能得到最接近的整數value

+0

聽起來就像你想要的最接近的值小於你的索引。 IE:最接近1的值是0,最接近0的值是11,取決於你的範圍。在這種情況下,最接近價值的指數應該是「價值 - 1%12」。 –

+0

11是否接近0而不是13? –

回答

2

這聽起來像你想要的最接近的值是而不是你的索引。 IE:最接近1的值是0,最接近0的值是11,依此類推(基於你的範圍[0-11])。

試試這個:

closest_value = (value - 1) % 12 

您應該能夠使用該結果爲指標,你notation_values因此可以判斷相應的音符。

相關問題