我有一本字典,其中每个键对应一个具有相同数量值的列表。我将每个列表都视为“列”。使用每个列表中的值,我试图编写一个线性近似函数。除非我遇到列表中重复值的问题,否则它会起作用。当我使用indexof时,它返回一个y值,该值与传入的x值的首次出现相对应,而不是与该值在其自己的列表中的索引相同的实际y值,而不是在其各自的列表中的x值。我可以将字典更改为Numpy矩阵吗?还是可以使用字典来做到这一点。
def calc_target(x1, x2, type1, type2, X):
"""Uses linear approximation to return a calculated
value for the passed in type using a target value.
Keyword arguments:
x1 -- first x value
x2 -- second x value
type1 -- type of value to be calculated
type2 -- type of value passed in
X -- target value
"""
y2 = float(data[type1][data[type2].index(str(x2))])
y1 = float(data[type1][data[type2].index(str(x1))])
print 'X:'
print x1
print x2
print 'Y:'
print y1
print y2
slope = (y2 - y1)/(x2 - x1)
print slope
return slope * (X - x1) + y1
例如,如果我的x值为3,并且列表中的第二个2与键2对应,那么我如何确保我得到2的y值而不是24的y值。因为如果我使用indexof,它将在2的第一个实例处返回对应的值,它将是24而不是21。
答案 0 :(得分:2)
如果要遍历列表,可以像这样同时遍历两个列表
for value1, value2 in zip(dictionary_name[key1],dictionary_name[key2]):
do something
这样,您可以确保在每个列表中查找相同的索引。您并不是直接按值查找它们。有帮助吗?
答案 1 :(得分:0)
Numpy数组是一个很好的选择,但是我找不到一个很好的答案,不需要我重组整个程序。我通过将calc_target函数的传入参数更改为包括index1和index2值来解决了此问题。这些索引分别表示x1和x2的索引。然后,当我得到“ y值”时,我就使用这些索引值。