Python 如果t是浮点数,如何存储f(t)?

Python 如果t是浮点数,如何存储f(t)?,python,python-3.x,Python,Python 3.x,我需要计算压力波动p(此代码已经运行良好);但是我还需要在不同的时间位置存储p的值,这样我就有了一个p(t)函数,以后可以绘制它 问题是:t的值是浮点数。带有t-值的列表如下所示: t=[88.386,88.986,90.386,…] 其中一些值也会多次出现,这意味着,如果不止一次地计算p(t=88.986),这两个值只需要相加 我该怎么办 如果您能提供帮助,我将不胜感激。您可以使用decorator包装您的函数并以适当的方式缓存值 In [39]: from functools import

我需要计算压力波动
p
(此代码已经运行良好);但是我还需要在不同的时间位置存储
p
的值,这样我就有了一个
p(t)
函数,以后可以绘制它

问题是:
t
的值是浮点数。带有
t
-值的列表如下所示:

t=[88.386,88.986,90.386,…]

其中一些值也会多次出现,这意味着,如果不止一次地计算
p(t=88.986)
,这两个值只需要相加

我该怎么办


如果您能提供帮助,我将不胜感激。

您可以使用decorator包装您的函数并以适当的方式缓存值

In [39]: from functools import wraps

In [40]: from collections import defaultdict

In [41]: cache = defaultdict(float) 

In [42]: def cache_value(f):
   ....:         global cache
   ....:         @wraps(f)
   ....:         def wrapped(n):
   ....:                 result = f(n)
   ....:                 cache[n] += result
   ....:                 return result
   ....:         return wrapped
这里,
defaultdict
将向缓存中添加一个新项,如果它在字典中不存在,否则将把新值与前一个值相加

演示:

[43]中的
:@cache\u值
..:def p(n):
返回2
....: 
在[44]中:
In[44]:p(6.33)
Out[44]:2
In[45]:p(6.33)
Out[45]:2
In[46]:p(4.15)
Out[46]:2
In[47]:p(5.07)
Out[47]:2
在[48]中:缓存
Out[48]:defaultdict(,{4.15:2.0,5.07:2.0,6.33:4.0})

来自您的答案;您希望使用位置作为关键点,并为此提供一些值。这基本上意味着你想使用dict而不是list。您可以通过说
dict\u time[key]=value
为字典赋值。例如:

dict_time = {}
dict_time[0.1] = 2
print(dict_time[0.1])
//2
若要将值相加(若值存在),您可以检查它们的键是否已存在于dict中,然后将其相加(若存在),否则只需将其相加即可:

if key in dict_time:
   dict_time[key] += value
else:
   dict_time[key] = value
或者您可以按照kasramvd的建议使用
defaultdict
,在这种情况下,您可以只使用+=而不检查它们是否存在

稍后,您可以通过询问dict_time[key]来访问该值:

>>> dict_time[0.1]
1

如果您想继续使用列表,可以使用集合来获取所有唯一的时间值,并将这些值与该时间的所有压力元素相加。压力值将存储在该时间值的第一次注册重复的对应索引中:

p = [3, 5, 6, 5]
t = [88.386, 88.986, 90.386, 88.386]

# the added presures will be stored in this list
new_pressures = []
# get all the different time values
unique_times = set(t)

#Create new null element in list for every unique time
for value in unique_times:
    new_pressures.append(0)
    for index, item in enumerate(t):
        if item == value:
            #add to the pressure value every time coincidence index
            new_pressures[-1] += p[index]
print new_pressures
函数的输出结果是:

[8, 5, 6]

为什么它们是浮动的问题?您可以将浮动添加到列表中,这没有问题。我如何访问
p
时的值
1.5
?我只知道
p[int]
,但不知道
p[float]
我不需要在列表中添加带浮点数的内容。我需要将数据存储在88.386的“位置”上,依此类推,那么
dict
将是一个更好的选择。这是否可以解决列表的问题?作为补充,您应该确保p值被舍入到一个可接受的位数,以便使缓存正常工作。@aluriak注意,但这取决于OP的意图,想让我们说“代码>2.33 < /代码>和<代码> 2.3333代码>作为一个键。非常感谢!这种使用集合的可能性实际上对我的情况是最好的。
[8, 5, 6]