使用一系列角度python创建一个循环列表

2024-06-10 06:12:26 发布

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

我有一个列表,其中包含角度集的上限和下限

有点像

[[1,22],[2,24]…[359,15],[360,21]]

共360个元素

现在我要检查从1到360的每个角度列表中包含该角度的元素

我在考虑使用下限和上限来创建带有range或{}的列表元素,并检查角度是否包含,但是当lower高于upper时,np.arange会生成空列表

for i in range(1,361):
    sel=[]
    for coe in coef:
        if i in range(coe[0],coe[1]):
            sel.append(coe)

我也尝试了itertoolscycle,但我不知道如何在这种情况下应用它


Tags: in元素列表forifnprangeupper
2条回答

标准的方法是使用模数。{s1}的A1}显示了如何在C/C++中实现这一点。在

下面是一个Python实现和测试。Python中的代码更简单,因为在Python中a % b总是与b具有相同的符号。在

测试代码以60为步进,循环从0到360度的所有角度对,对于ab,测试所有角度x,每30步从0到360度。扇区从a开始,然后扫描到b。因此,扇区(60,120)包含60°,但是(120,60)包含300°。在

如果x在扇区内(包括端点),它将被添加到result列表中。在

def in_angle_interval(x, a, b):
    return (x - a) % 360 <= (b - a) % 360

# test 

for a in range(0, 420, 60):
    for b in range(0, 420, 60):
        result = [x for x in range(0, 390, 30) if in_angle_interval(x, a, b)]
        print('{:3}-{:3} {}'.format(a, b, result))

输出

^{pr2}$

这是一个使用问题中的数据的测试。在

coef = [[1,22], [2,24], [359,15], [360,21]]
print(coef)
for x in range(0, 361):
    sel = [coe for coe in coef if in_angle_interval(x, coe[0], coe[1])]
    if sel:
        print('{:3} {}'.format(x, sel))

输出

[[1, 22], [2, 24], [359, 15], [360, 21]]
  0 [[359, 15], [360, 21]]
  1 [[1, 22], [359, 15], [360, 21]]
  2 [[1, 22], [2, 24], [359, 15], [360, 21]]
  3 [[1, 22], [2, 24], [359, 15], [360, 21]]
  4 [[1, 22], [2, 24], [359, 15], [360, 21]]
  5 [[1, 22], [2, 24], [359, 15], [360, 21]]
  6 [[1, 22], [2, 24], [359, 15], [360, 21]]
  7 [[1, 22], [2, 24], [359, 15], [360, 21]]
  8 [[1, 22], [2, 24], [359, 15], [360, 21]]
  9 [[1, 22], [2, 24], [359, 15], [360, 21]]
 10 [[1, 22], [2, 24], [359, 15], [360, 21]]
 11 [[1, 22], [2, 24], [359, 15], [360, 21]]
 12 [[1, 22], [2, 24], [359, 15], [360, 21]]
 13 [[1, 22], [2, 24], [359, 15], [360, 21]]
 14 [[1, 22], [2, 24], [359, 15], [360, 21]]
 15 [[1, 22], [2, 24], [359, 15], [360, 21]]
 16 [[1, 22], [2, 24], [360, 21]]
 17 [[1, 22], [2, 24], [360, 21]]
 18 [[1, 22], [2, 24], [360, 21]]
 19 [[1, 22], [2, 24], [360, 21]]
 20 [[1, 22], [2, 24], [360, 21]]
 21 [[1, 22], [2, 24], [360, 21]]
 22 [[1, 22], [2, 24]]
 23 [[2, 24]]
 24 [[2, 24]]
359 [[359, 15]]
360 [[359, 15], [360, 21]]

也许使用定制的比较功能?在

    def compare(angle, lower, upper):
        if lower <= upper:
            return lower <= angle and angle <= upper
        else:
            return ((angle >= lower and angle <= 360)
                    or (angle <= upper and angle >= 1))

然后测试角度是否在以下任一间隔内:

^{pr2}$

相关问题 更多 >