【问题标题】:Print all surrounding coordinates given an X and Y [closed]打印给定 X 和 Y 的所有周围坐标 [关闭]
【发布时间】:2018-10-19 12:58:00
【问题描述】:

我想做一个给定列表和范围的函数:

coordinate=[x,y]

创建一个包含范围内所有整数点的列表。 例如,

coordinate=[0,0]
range=1

会回来

[[-1,1],[0,1],[1,1],[-1,0],[0,0],[0,1],[-1,-1],[0,-1],[1,-1]]

同样,范围 2 会返回

[[-2,2],[-1,2],[0,2]...]

【问题讨论】:

  • 好主意,你已经有了什么?
  • 您已经尝试过什么,您的想法是什么?我不想做你的作业

标签: python python-3.x matrix


【解决方案1】:

您可以将itertools.product 与一致的range 一起使用。说到range,您应该为您的range 变量选择其他名称,例如dist.

>>> coordinate = (x,y) = (0, 0)
>>> dist = 1
>>> [(x+dx, y+dy) for (dx, dy) in itertools.product(range(-dist, dist+1), repeat=2)]
[(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 0), (0, 1), (1, -1), (1, 0), (1, 1)]

如果您想要与示例输出中完全相同的顺序,请尝试以下变体:

>>> [(x+dx, y+dy) for (dy, dx) in itertools.product(range(dist, -dist-1, -1), range(-dist, dist+1))]
[(-1, 1), (0, 1), (1, 1), (-1, 0), (0, 0), (1, 0), (-1, -1), (0, -1), (1, -1)]

【讨论】:

    【解决方案2】:
    def coord(x,y,range_of_search):
        scan=range_of_search
        blank=[]
        for i in range(x-scan,x+scan+1):
            for j in range(y-scan,y+scan+1):
                blank.append([i,j])
    
        print(blank)
    coord(0,0,2)
    

    我知道了,没想到马上附加一个列表。我正在附加单个元素

    【讨论】:

      【解决方案3】:

      使用列表理解:

      >>> ranges = 1
      >>> [[y, x] for x in range(ranges, -(ranges + 1), -1) for y in range(-ranges, ranges + 1)])
      [[-1, 1], [0, 1], [1, 1], [-1, 0], [0, 0], [1, 0], [-1, -1], [0, -1], [1, -1]]
      >>> ranges = 2
      >>> [[y, x] for x in range(ranges, -(ranges + 1), -1) for y in range(-ranges, ranges + 1)])
      [[-2, 2], [-1, 2], [0, 2], ...]]
      

      【讨论】:

        猜你喜欢
        • 2021-07-11
        • 2018-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多