有条件地在for循环中交换轴用于多维列表Python

时间:2015-08-21 14:05:54

标签: python multidimensional-array

我有一组函数在迭代二维列表时有条件地切换轴。到目前为止,我正在使用if语句并复制for循环中的代码,并交换轴"手动":

i=(randomGenerator.nextInt())%n;
j=(randomGenerator.nextInt())%n;

是否有优雅的"交换轴的方法可以防止在每个条件的for循环中重复使用代码?它将大大提高代码的可读性。 感谢。

3 个答案:

答案 0 :(得分:1)

你可以尝试这个解决方案

def foo(i, axis):
    for j in range(9):
        value = grid[i][j] if axis == 'x' else grid[j][i]
        doSomething(value)
        doSomethingElse(value)

第3行是一个内联IF语句,其作用类似于简单的IF,但仅在一行中缩写

if axis == 'x':
    value = grid[i][j] 
else:
    value = grid[j][i]

最好只编写一个函数调用,而不是在if的两个块中都包含它,因为它更易于阅读和维护

答案 1 :(得分:0)

可能有一个更简洁/ pythonic的解决方案,但这是一个可能的改进:

def foo(i, axis):

    for j in range(9):
        if axis == 'x': 
            x, y = i, j
        else:
            x, y = j, i
        doSomething(grid[x][y])
        doSomethingElse(grid[x][y])

答案 2 :(得分:0)

扩展评论

def foo(i, axis):

    def doManythings(x, y):
        doSomething(grid[x][y])
        doSomethingElse(grid[x][y])

    for j in range(9):
        if axis == 'x': 
            doManythings(i, j)
            grid[i][j] += 1
        else:
            doManythings(j, i)
            grid[i][j] -= 1