【问题标题】:Array diagonals python数组对角线 python
【发布时间】:2023-03-10 13:40:01
【问题描述】:

我有一个 10x10 的数组,我需要处理两点之间对角线上的所有点,并检查列表中是否存在。我这样做了,但我不知道为什么它不起作用:

把你放在上下文中:

a = [i,j] b = [i,j], i 和 j = range(11)

例如,下面的代码应该适用于 a = [5,4] b = [8,7]。

     ...
     elif (b[1] - a[1]) == (b[0] - a[0]):
        #to southeast, code for the other 3 cases are almost the same
        if b[0] > a[0] and b[1] > a[1]:
            n = a[0]
            m = a[1]
            while (n != b[0]) and (m != b[1]):
                n +=1
                m +=1 

                #don't think this part below is relevant
                if board[n][m] in somelist:
                    mov_inv += 1
                else:
                    mov_inv += 0

这是在一个函数内部,如果 mov_inv > 1 则返回 False,如果 mov_inv = 0 则返回 True,但它不是那样工作的。希望你明白我的意思。谢谢

【问题讨论】:

    标签: arrays list python-3.x


    【解决方案1】:
    def diag(pointa, pointb):
        """ pointa and pointb are tuples
            returns a generator that yields values along the diagonal 
            from pointa to pointb"""
    
        if abs(pointa[0] - pointb[0]) != abs(pointa[1] - pointb[1]):
            #Sanity check. Diagonal are equal along x and y
            raise ValueError("Points {} and {} are not diagonal".format(pointa, pointb))
        x_dir = 1 if pointa[0] < pointb[0] else -1
        y_dir = 1 if pointa[1] < pointb[1] else -1
        while pointa != pointb:
            pointa = (pointa[0] + x_dir, pointa[1] + y_dir)
            yield pointa
    

    上面没有产生pointb,因为你已经知道了

    【讨论】:

      【解决方案2】:
      board=xrange(10*10)
      diagonal1=[board[C:(10-C)*10:10+1] for C in xrange(10)]
      diagonal2=[board[C:(C*10)+1:10-1] for C in xrange(10)]
      print 'diagonal ASC ',diagonal1
      print 'diagonal DESC ',diagonal2
      

      那么你只需检查 a 和 b 是否在同一对角线

      assume a,b= [5,4] , [8,7]
      def Square(m,n):
          return 10*(m-1)+n;
      m,n=a
      A=Square(m,n)
      m,n=b
      B=Square(m,n)
      

      **print ('ASCENDENT',[diagonal1[x] for x in xrange(10) if A in diagonal[x] and B in diagonal[x]])**
      

      【讨论】:

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