Как сократить длинный список операторов if, используя другой метод, например, для циклов - PullRequest
0 голосов
/ 15 января 2019

Я строю функцию в Python, и я настроил что-то, что работает, но это очень неэффективно.

if board[0][0] == 1:
    detailed[1][2] = "X"
if board[1][0] == 1:
    detailed[3][2] = "X"
if board[2][0] == 1:
    detailed[5][2] = "X"
if board[0][1] == 1:
    detailed[1][6] = "X"
if board[1][1] == 1:
    detailed[3][6] = "X"
if board[2][1] == 1:
    detailed[5][6] = "X"
if board[0][2] == 1:
    detailed[1][10] = "X"
if board[1][2] == 1:
    detailed[3][10] = "X"
if board[2][2] == 1:
    detailed[5][10] = "X"

Я знаю, что могу использовать циклы для того, чтобы это выглядело лучше / эффективнее, но застрял почти сразу. Пока это то, что у меня есть:

for x in range(3):
    for y in range(3):
        if board[y][x] == 1:

Это обрабатывает первую часть каждого оператора if, но не детальную строку [] [] = "X". Есть видимый паттерн, но я не знаю, как использовать его в своих интересах.

Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Нет необходимости для цикла, если вы не состоите в браке с ним. Предполагая, что вы можете работать с массивами numpy:

import numpy as np

board = np.array(board)     # if they aren't already numpy arrays
detailed = np.array(board)
mask = board[0:3, 0:3] == 1
detailed[1:7:2, 2:11:4][mask] = 'X'
0 голосов
/ 15 января 2019

Если я правильно понял логику, это должно дать вам то, что вы хотите:

for x in range(3):
    for y in range(3):
        if board[x][y] == 1:
            detailed[x*2 + 1][y*4 + 2] = 'X'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...