magic_constant = 15 def is_magic_square(square): line = [column for row in square for column in row] if len(line) != len(set(line)): return False for row in square: if sum(row) != magic_constant: return False for column in zip(*square): if sum(column) != magic_constant: return False if sum([square[i][j] for i,j in zip(range(3), range(3))]) != magic_constant: return False if sum([square[i][j] for i,j in zip(range(3), range(2, -1, -1))]) != magic_constant: return False return True squares = [s for s in permutations([p for p in permutations(range(1, 10), 3) if sum(p) == magic_constant], 3) if is_magic_square(s)]