首页 > 解决方案 > 如何仅检查网格 2d 列表中某个数字的列和行

问题描述

所以说例如这是网格

      1  2  3  4  5  6  7  8  9
    ----------------------------
 1 |[[0, 0, 6, 9, 5, 8, 0, 3, 2], 
 2 | [0, 7, 5, 6, 2, 1, 0, 3, 0], 
 3 | [0, 8, 5, 0, 0, 6, 0, 0, 0], 
 4 | [0, 3, 4, 0, 0, 9, 0, 7, 1], 
 5 | [8, 6, 0, 0, 0, 0, 0, 2, 3], 
 6 | [3, 0, 0, 1, 7, 0, 0, 5, 0], 
 7 | [5, 6, 7, 2, 0, 4, 0, 0, 3], 
 8 | [9, 1, 7, 0, 0, 4, 0, 8, 0], 
 9 | [3, 4, 8, 0, 0, 0, 0, 0, 1]]

我如何才能找到仅在特定行和列中的所有数字。比如(6,7)的x和y坐标,也就是4,我想知道只有那一行和那一列中不为0的所有数字。所以答案是[8,1,6,9 ,4,4,5,6,7,2,3]。可以有重复,顺序无关紧要。那么我如何找到一个特定的点和一个网格并检查它的列和行中的数字并将其放入列表中?

标签: python

解决方案


你可以试试这个:

import numpy
 

l= [[0, 0, 6, 9, 5, 8, 0, 3, 2], 
    [0, 7, 5, 6, 2, 1, 0, 3, 0], 
    [0, 8, 5, 0, 0, 6, 0, 0, 0], 
    [0, 3, 4, 0, 0, 9, 0, 7, 1], 
    [8, 6, 0, 0, 0, 0, 0, 2, 3], 
    [3, 0, 0, 1, 7, 0, 0, 5, 0], 
    [5, 6, 7, 2, 0, 4, 0, 0, 3], 
    [9, 1, 7, 0, 0, 4, 0, 8, 0], 
    [3, 4, 8, 0, 0, 0, 0, 0, 1]]

# initializing list
def get_coordinates(array,row,col):
    x=[j for j in array[ : , col]if j!=0]
    y=[i for i in array[row] if i!=0]
    return x+y
# converting list to array
arr = numpy.array(l)
print(get_coordinates(arr,6,5))

推荐阅读