【Python】2次元配列を1次元配列に変換する(平坦化)

周辺のセル(ムーア近傍)の生きているセルの合計を求めるため、
2次元配列を1次元配列に変換(平坦化)するflattenメソッドを作成する。

class LifeGame:
  def __init__(self):
    self.cells = [[0, 1, 0, 0, 0],
                  [0, 0, 1, 0, 0],
                  [1, 1, 1, 0, 0],
                  [0, 0, 0, 0, 0],
                  [0, 0, 0, 0, 0]]

  def print_cells(self):
    for x in self.cells:
      print(*x)

  def get_around_cells(self,_x,_y):
    return [[self.cells[y][x] for x in range(max(_x-1,0),min(_x+2,len(self.cells[0]))) if x != _x or y != _y] for y in range(max(_y-1,0),min(_y+2,len(self.cells)))]

  def flatten(self,_arr):
    return sum(_arr,[])

lg = LifeGame()
print(lg.get_around_cells(1,1))
print(lg.flatten(lg.get_around_cells(1,1)))
tmp = [[0]*5 for _ in range(5)]
for y in range(5):
  for x in range(5):
    tmp[y][x] = sum(lg.flatten(lg.get_around_cells(x,y))) 
for x in tmp:
  print(*x)

今回は、以下のように出力される。

[[0, 1, 0], [0, 1], [1, 1, 1]]
[0, 1, 0, 0, 1, 1, 1, 1]
1 1 2 1 0
3 5 3 2 0
1 3 2 2 0
2 3 2 1 0
0 0 0 0 0

参考

ライフゲーム - Wikipedia
タイトルとURLをコピーしました