Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用列表理解减少Python代码_Python - Fatal编程技术网

用列表理解减少Python代码

用列表理解减少Python代码,python,Python,此代码用于从图表中返回具有特定(作为元组接收)单元格周围坐标的单元格。显然,使用列表理解可以显著减少代码行的数量。我将如何使用列表理解 def get_neighbours(cell, size): x = cell[0] y = cell[1] neighbours = [] if x - 1 >= 0 and x - 1 <= size - 1: neighbours += [(x - 1, y)] if x + 1 &g

此代码用于从图表中返回具有特定(作为元组接收)单元格周围坐标的单元格。显然,使用列表理解可以显著减少代码行的数量。我将如何使用列表理解

def get_neighbours(cell, size):
    x = cell[0]
    y = cell[1]
    neighbours = []

    if x - 1 >= 0 and x - 1 <= size - 1:
        neighbours += [(x - 1, y)]
    if x + 1 >= 0 and x + 1 <= size - 1:
        neighbours += [(x + 1, y)]
    if y - 1 >= 0 and y - 1 <= size - 1:
        neighbours += [(x, y - 1)]
    if y + 1 >= 0 and y + 1 <= size - 1:
        neighbours += [(x, y + 1)]

    return sorted(neighbours)
def get_邻居(单元格、大小):
x=单元[0]
y=单元[1]
邻居=[]

如果x-1>=0且x-1=0且x+1=0且y-1=0且y+1,则会出现一些重复的代码(边界检查和列表附录),这表明循环可能是改进代码的好方法

我是这样写的:

def get_neighbours(cell, size):
    x, y = cell
    steps = (-1, 0), (0, -1), (0, 1), (1, 0)
    return [(x+dx, y+dy) for dx, dy in steps
            if 0 <= x+dx < size and 0 <= y+dy < size]
def get_邻居(单元格、大小):
x、 y=单元
步骤=(-1,0)、(0,-1)、(0,1)、(1,0)
对于dx,dy,按步返回[(x+dx,y+dy)]

如果0,那么您现在编写的方式有什么问题?“减少代码行”实际上并不是质量的衡量标准。如果您将此放在列表理解中(特别是如果您不进一步重构),列表理解将是一个很长的不可读代码行。您阅读代码的频率高于编写代码的频率,因此请在编写之前仔细考虑“压缩”代码,特别是当它已经工作时。这是一个不应该在列表理解中的代码示例。非常优雅!但是请注意,您的代码执行的并不相同(可能是OP代码中的错误)。例如,如果
x>size+2
,则不会给出任何邻居,而OP的代码将给出y轴上的邻居。