以下代码工作得很好.但它看起来如此冗长,肯定有一种更优雅的方式来计算它?
我的想法是我有一个包含100个递增时间戳的列表,我想查看这些时间戳并计算每个时间戳之间的平均时间.
下面的代码起作用,但我确信反转这样的列表真的很低效.
有什么建议?
#!/usr/bin/python
nums = [1,4,6,10]
print nums
nums_orig = list(nums)
nums_orig.pop()
nums.reverse()
nums.pop()
nums.reverse()
print nums
print nums_orig
total = 0
for idx, val in enumerate(nums):
difference = val - nums_orig[idx]
total += difference
print idx, val - nums_orig[idx]
print "Mean difference is %d" % (total / len(nums))
Run Code Online (Sandbox Code Playgroud)
如果你有numpy:
>>> import numpy as np
>>> np.diff([1,4,6,10]).mean()
3.0
Run Code Online (Sandbox Code Playgroud)
你在寻找什么
>>> nums = [1,4,6,10]
>>> [x-y for x,y in zip(nums[1:],nums)]
[3, 2, 4]
>>> delta=[x-y for x,y in zip(nums[1:],nums)]
>>> float(sum(delta))/len(delta)
3.0
Run Code Online (Sandbox Code Playgroud)
使用Starmap的解决方案
>>> from itertools import starmap
>>> from operator import sub
>>> sum(starmap(sub,zip(nums[1:],nums)))/float(len(nums)-1)
3.0
Run Code Online (Sandbox Code Playgroud)