我有一组函数在迭代二维列表时有条件地切换轴。到目前为止,我正在使用if语句并复制for循环中的代码,并交换轴"手动":
i=(randomGenerator.nextInt())%n;
j=(randomGenerator.nextInt())%n;
是否有优雅的"交换轴的方法可以防止在每个条件的for循环中重复使用代码?它将大大提高代码的可读性。 感谢。
答案 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