用列表理解减少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轴上的邻居。