Python 如何将给定的时间间隔划分为相等的时间间隔?

Python 如何将给定的时间间隔划分为相等的时间间隔?,python,Python,给定一段时间间隔: a = [20,40] 我需要将其转换为相等的间隔: a = [[20,30],[30,40]] 我尝试了以下代码: v1 = a[0]; v2 = a[1] d.append(v1) val = abs(v1-v2) n = int(val/2) for i in range(n): v1 += n d.append(v1) print d 有人能推荐一个代码来做这件事吗?这会很有帮助的我可以指出一些你尝试过的错误,而不是为你写代码 for i i

给定一段时间间隔:

a = [20,40]
我需要将其转换为相等的间隔:

a = [[20,30],[30,40]]
我尝试了以下代码:

v1 = a[0]; v2 = a[1]
d.append(v1)
val = abs(v1-v2)
n = int(val/2)
for i in range(n):
     v1 += n
     d.append(v1)
print d

有人能推荐一个代码来做这件事吗?这会很有帮助的

我可以指出一些你尝试过的错误,而不是为你写代码

for i in range(n):
     v1 += n
     d.append(v1)
请记住,在您的示例中,n设置为10。所以当你说for i在范围(n)内时,你将在for循环中迭代10次

如果你看一下附加到d的方式,这并不是在整个列表中附加一个较小的列表。这将继续将所有数字添加到一个列表中

我猜这是您当前获得的输出:[20、30、40、50、60、70、80、90、100、110、120]


根据我所说的,再给它一次机会:-)

您可以通过计算一个区间并使用循环在使用该区间的每次迭代中创建一个元组来解决第一部分。这将给出与您列出的所需结果相对应的答案

但是,请注意,在您的示例中,上一个元组的结尾与下一个元组的开头相同。如果不希望它们相交,则需要使用与第一个类似的逻辑,但在正确的时间执行+1

下面是一些代码,第一个使用for循环,第二个使用post-test循环:

def interval_divide(min, max, intervals):
   assert intervals != 0
   interval_size = round((max - min) / intervals)
   result = []
   start = min
   for start in range(min, max, interval_size):
      end = start + interval_size
      result.append([start, end])
   return result

a = [20, 40]
print("1 intervals", interval_divide(a[0], a[1], 1))
print("2 intervals", interval_divide(a[0], a[1], 2))
print("3 intervals", interval_divide(a[0], a[1], 3))
print("4 intervals", interval_divide(a[0], a[1], 4))

def interval_divide2(min, max, intervals):
   assert intervals != 0
   interval_size = round((max - min) / intervals)
   result = []
   start = min
   end = min + interval_size
   while True:
      result.append([start, end])
      start = end + 1
      end = end + interval_size
      if len(result) == intervals:
         break
   return result

print("-----")
print("1 intervals", interval_divide2(a[0], a[1], 1))
print("2 intervals", interval_divide2(a[0], a[1], 2))
print("3 intervals", interval_divide2(a[0], a[1], 3))
print("4 intervals", interval_divide2(a[0], a[1], 4))
结果如下:

$ python3 intervals.py 
1 intervals [[20, 40]]
2 intervals [[20, 30], [30, 40]]
3 intervals [[20, 27], [27, 34], [34, 41]]
4 intervals [[20, 25], [25, 30], [30, 35], [35, 40]]
-----
1 intervals [[20, 40]]
2 intervals [[20, 30], [31, 40]]
3 intervals [[20, 27], [28, 34], [35, 41]]
4 intervals [[20, 25], [26, 30], [31, 35], [36, 40]]
请注意,当我们使用三个间隔时,端点不会正确终止。这是因为我们不能在没有提示的情况下将20除以3,因此不可能所有的间隔大小都相同

我们仍然可以改进我们的答案,尽管在计算间隔时,我们删除了舍入,如下所示(并且仍然以整数形式保留结果):

新的答案是:

1 intervals [[20, 40]]
2 intervals [[20, 30], [30, 40]]
3 intervals [[20, 26], [26, 33], [33, 40]]
4 intervals [[20, 25], [25, 30], [30, 35], [35, 40]]
-----
1 intervals [[20, 40]]
2 intervals [[20, 30], [31, 40]]
3 intervals [[20, 26], [27, 33], [34, 40]]
4 intervals [[20, 25], [26, 30], [31, 35], [36, 40]]
三个间隔仍然不完全相等,但非常接近,没有使用小数点显示答案。

使用此选项

import numpy as np

points = np.linspace(20, 40, num=2+1)
intervals = np.array([points[:-1], points[1:]]).transpose()
print(intervals)
并获得一个np.array:

[[20. 30.]
 [30. 40.]]
当然,为了

points = np.linspace(10, 40, num=6+1)
intervals = np.array([points[:-1], points[1:]]).transpose()
print(intervals)
我们有

[[10. 15.]
 [15. 20.]
 [20. 25.]
 [25. 30.]
 [30. 35.]
 [35. 40.]]

这是您第四次问“如果有人能建议一种在python中实现这一点的方法,这将非常有用”。显然,填鸭式地编写代码对您毫无帮助。看起来您希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的程序员编写代码,但他们通常只在海报已经试图自己解决问题时才提供帮助。演示这项工作的一个好方法是,包括您迄今为止编写的代码、示例输入(如果有)、预期输出和实际获得的输出(控制台输出、堆栈跟踪、编译器错误——任何适用的)。你提供的细节越多,你可能得到的答案就越多。
[[10. 15.]
 [15. 20.]
 [20. 25.]
 [25. 30.]
 [30. 35.]
 [35. 40.]]