我给出了以下三个变量:
start = 30 #starting value
end = 60 #ending value
slice_size = 6 #value difference per tuble
start
和end
是数组的行号。我的目标是创建一个元组数组/列表,其中每个元组都包含slice_size
定义的项目。一个小例子:如果start
和end
具有上述值,则前四个元组将是:
[[30,35],[36,41],[42,47],[48,53],...]。
但是现在有了线索:下一个元组的第一个值不是以+ slice_size
之前的第一个值开头,而是以第一个值+ slice_size/2
开头。所以我想要这样的东西:
[[30,35],[33,38],[36,41],[39,44],...]。
此元组列表一直持续到到达end
或恰好到达它之前-直到<=end
为止。列表的最后一个值不允许传递end
的值。当然,slice_size
的值必须始终为偶数才能正常工作。
我的nooby尝试是通过while循环完成的:
condition = 0
i = 0
list = []
half_slice = int(slice_size /2)
while condition <= end:
list.append([start+int(slice_size/2)*i,start+((slice_size-1)+i*half_slice)])
condition = start+((slice_size-1)+i*int(slice_size/2))
i += 1
问题是,它可以工作。但是我知道这完全是垃圾,我想提高自己的技能。您有几个代码行中有建议吗?
答案 0 :(得分:1)
1)请勿使用list
作为变量名。它是保留的关键字。
2)不是NumPy解决方案,但您可以使用列表理解:
start = 30 #starting value
end = 60 #ending value
slice_size = 6 #value difference per tuble
result = [[current, current + slice_size - 1] for current in range(start, end - slice_size + 2, slice_size // 2)]
print(result)
输出:
[[30, 35], [33, 38], [36, 41], [39, 44], [42, 47], [45, 50], [48, 53], [51, 56], [54, 59]]
这也适用于奇数slice_size
。
答案 1 :(得分:1)
您不得使用list
,因为它是保留字
import numpy as np
start = 30 #starting value
end = 60 #ending value
slice_size = 6 #value difference per tuble
l = [[i,j] for i,j in zip(np.arange(start, end, slice_size/2),
np.arange(start + slice_size - 1,
end + slice_size - 1,
slice_size/2)
)
]
print(l)
输出:
[[30.0, 35.0],
[33.0, 38.0],
[36.0, 41.0],
[39.0, 44.0],
[42.0, 47.0],
[45.0, 50.0],
[48.0, 53.0],
[51.0, 56.0],
[54.0, 59.0],
[57.0, 62.0]]