【问题标题】:How to shorten a long list of if statements using another method, such as for loops如何使用另一种方法(例如 for 循环)缩短一长串 if 语句
【发布时间】:2019-06-09 20:06:51
【问题描述】:

我正在用 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 循环使它看起来更好/更高效,但几乎立即卡住了。到目前为止,这就是我所拥有的:

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

这处理每个 if 语句的第一部分,但不处理 detail[][] = "X" 行。有一个可见的模式,但我不知道如何利用它来发挥我的优势。

感谢您的帮助。

【问题讨论】:

  • detailed[2*y+1][4*x+2] = "X".

标签: python python-3.x for-loop if-statement


【解决方案1】:

如果我理解的逻辑是正确的,这应该会给你你想要的:

for x in range(3):
    for y in range(3):
        if board[x][y] == 1:
            detailed[x*2 + 1][y*4 + 2] = 'X'

【讨论】:

  • 你是对的。我对其进行了编辑以交换它们。我没有仔细看原始代码部分。将 x 放在 y 之前似乎更合乎逻辑;-)。
【解决方案2】:

如果你没有结婚,就不需要 for 循环。假设您可以使用 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'

【讨论】:

    猜你喜欢
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多