强制靶场通过z的通用算法

2024-04-19 17:55:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一个通用算法,给定范围值startend将生成一个数字列表,但是数字必须经过零。。 这是我目前的代码:

end = 78
start = -1 * end
step_size = 16
numbers = range(start, end+step_size, step_size)

$ numbers
Out[90]: [-78, -62, -46, -30, -14, 2, 18, 34, 50, 66, 82]

在这个特殊的例子中,我会从每个数字中减去2,这样这些数字就有一个零值。但我怎样才能更普遍地做到这一点呢?我这样做是为了计算一个图的y-tic位置,因此我想让它们穿过0一次。你知道吗


Tags: 代码算法列表sizesteprange数字tic
2条回答

start % step_size应该是所需的偏移量:

>>> end = 78
>>> start = -1 * end
>>> step_size = 16
>>> range(start-(start%step_size), end+step_size, step_size)
[-80, -64, -48, -32, -16, 0, 16, 32, 48, 64, 80]

示例:

def get_range(end, step_size):
    start = -1 * end
    return range(start-(start%step_size), end+step_size, step_size)

>>> get_range(23, 4)
[-24, -20, -16, -12, -8, -4, 0, 4, 8, 12, 16, 20, 24]
>>> get_range(19, 11)
[-22, -11, 0, 11, 22]
>>> get_range(103, 32)
[-128, -96, -64, -32, 0, 32, 64, 96, 128]

找到列表绝对值的最小值,从列表的每个元素中减去它。这不是最理想的解决方案,但它又快又脏而且有效:

(我使用numpy是因为它比列表更有效,如果您使用matplotlib,则可能有numpy)

>>> from numpy import *
>>> a = arange(-10, 20, 3)
>>> b = argmin([abs(_) for _ in a])
>>> a-=a[b]
>>> a
array([-9, -6, -3,  0,  3,  6,  9, 12, 15, 18])

相关问题 更多 >