我以为我已经或多或少地弄清了列表推导,但后来我从另一个问题中看到了这行代码。
Pythonic and efficient way of finding adjacent cells in grid
我已将代码更改为仅返回组成相邻切片的8个元组(添加到当前切片时)。
[(i, j) for i in (-1,0,1) for j in (-1,0,1) if i != 0 or j != 0]
产生
[(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)]
除了有条件的最后一部分之外,该陈述对我来说实际上是有道理的:
if i != 0 or j != 0
如果我们试图找到相邻的单元格,并且我们想省略我们所在的单元格,那么条件部分是否应该读取AND而不是OR?
像这样:
if i != 0 and j != 0
相反,如果我把AND放在那里,我只返回这些元组:
(-1, -1), (-1, 1), (1, -1), (1, 1)
对我来说,这似乎很直观。