给定整数列表
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
的整数?
听起来您希望最接近的值小于您的索引。IE:最接近 1 的值是 0,最接近 0 的值是 11,依此类推(根据您的范围 [0-11](。
试试这个:
closest_value = (value - 1) % 12
您应该能够将结果用作notation_values的索引,以便确定相应的音符。