给定一段时间:
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
任何人都可以建议执行此操作的代码,这将是有帮助的
答案 0 :(得分:1)
我可以指出你尝试过的一些不正确的事情,而不是为你写出代码。
for i in range(n):
v1 += n
d.append(v1)
请记住,从你的例子中,n被设置为10.所以当你在范围(n)中说i时,你将在你的for循环中迭代10次。
如果您查看附加到d的方式,则不会将较小的列表附加到整个列表中。这将继续将所有数字附加到一个列表中。
我猜这是你目前得到的输出:[20,30,40,50,60,70,80,90,100,110,120]。
根据我的说法,再试一次: - )
答案 1 :(得分:0)
您可以通过计算间隔并使用循环在每次迭代中使用该间隔创建元组来解决第一部分。这将给出与您列出的所需结果相对应的答案。
但是,请注意,在您的示例中,上一个元组的结尾与下一个元组的开头相同。如果您不希望它们相交,那么您需要与第一个类似的逻辑,但在正确的时间执行+ 1。
这是一些代码,第一个使用for循环,第二个使用post测试循环:
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,因此不可能拥有相同大小的所有间隔。
我们仍然可以通过在计算间隔时删除舍入来改进我们的答案,如下所示(并且仍然保持结果为整数项):
def interval_divide(min, max, intervals):
assert intervals != 0
interval_size = (max - min) / intervals
result = []
start = min
end = start + interval_size
while True:
result.append([int(start), int(end)])
start = end
end = end + interval_size
if len(result) == intervals:
break
return result
def interval_divide2(min, max, intervals):
assert intervals != 0
interval_size = (max - min) / intervals
result = []
start = min
end = min + interval_size
while True:
result.append([int(start), int(end)])
start = end + 1
end = end + interval_size
if len(result) == intervals:
break
return result
新答案是:
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]]
三个区间仍然不完全相等,但相当接近而没有使用小数位显示答案。
答案 2 :(得分:0)
使用此
select
并获取一个np.array:
import numpy as np
points = np.linspace(20, 40, num=2+1)
intervals = np.array([points[:-1], points[1:]]).transpose()
print(intervals)
当然,对于
[[20. 30.]
[30. 40.]]
我们有
points = np.linspace(10, 40, num=6+1)
intervals = np.array([points[:-1], points[1:]]).transpose()
print(intervals)