Python使用列表理解减少代码

时间:2014-08-05 06:06:55

标签: 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 >= 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)

1 个答案:

答案 0 :(得分: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]

虽然使用for循环和简单代码而不是列表理解通常更好,但我认为这段代码运行良好且干净利落,并表达了“为每个方向添加相邻单元格的想法” “以可读的方式。