簡體   English   中英

以x步長循環范圍?

[英]Loop through a range in x steps?

我有一個圓的半徑和等式y = int(math.sqrt(pow(radius, 2)-pow(i,2))) (畢達哥拉斯)。
現在,我想像這樣在16個步驟的倍數內循環范圍range(-radius,0) + range(1, radius+1)

radius = 4
Actually output: -4, -3, -2, 1, 1, 2, 3, 4
What I want: -4, -3.5, -3, -2.5, -2, -1.5, -1, -0.5, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4

我發現,您無法輕松更改for循環的步長,但我找到了一種方法:

print("Length: ", len([x/2 for x in chain(range(-2*radius, 0), range(1,2*radius+1))]))
print("Values: ", [x/2 for x in chain(range(-2*radius, 0), range(1,2*radius+1))])

如上所述,它返回16和所需的“計數”。

現在我的問題是 :我該如何自動化? 因為它與4一起工作只是一個“巧合”,而與例如radius = 5它就不會這樣工作。 那么,有沒有一種解決方案可以讓我逐步擴展x范圍呢?

解決方案1.1:

您可以使用linspace -function,然后選擇那些不為0的值。這是由my_range在以下代碼中完成的:

import numpy as np

def my_range(radius, steps):
    ran = np.linspace(-radius, radius, steps+1)
    return ran[np.nonzero(ran)]

現在,

[i for i in my_range(4, 16)]

產生

[-4.0, -3.5, -3.0, -2.5, -2.0, -1.5, -1.0, -0.5, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0]

解決方案1.2:

或者,

list(my_range(4, 16))

產生相同的列表。


解決方案2:

如果您不想定義一個函數,這是一種實現同一目的的簡潔方法:

[i for i in np.linspace(-4, 4, 16+1) if i != 0]

希望您喜歡這個解決方案, __future__ import適用於python 2.x:

from __future__ import division
r = 4
result = [-a/2 for a in xrange(1, r*2+1)][::-1] + [a/2 for a in xrange(1, r*2+1)]
print result

看起來您想要+/-限制大小相等

然后,您可以選擇將端點包括在范圍內,如果這樣,則您希望獲得n + 1點

純python,不導入:

lim, n = 3, 10

[-lim + i * 2 * lim / (n - 1) for i in range(n)]
Out[27]: 
[-3.0,
 -2.3333333333333335,
 -1.6666666666666667,
 -1.0,
 -0.3333333333333335,
 0.3333333333333335,
 1.0,
 1.666666666666667,
 2.333333333333333,
 3.0]

要么

[-lim + i * 2 * lim / n for i in range( n + 1)]
Out[28]: 
[-3.0,
 -2.4,
 -1.8,
 -1.2,
 -0.6000000000000001,
 0.0,
 0.6000000000000001,
 1.2000000000000002,
 1.7999999999999998,
 2.4000000000000004,
 3.0]

將列表理解方括號更改為圓形可生成可用於代替range()的生成器

range函數采用三個參數start,stop和step(第三個參數是可選的)。 range(-4,4,0.5)將解決您的問題。 因此,讓我們假設-x是start並且x是stop。

step =  int(x/16);
range(-x, x, step);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM