在python中,我可以避免在多个嵌套循环中使用许多空格吗?

在python中,我可以避免在多个嵌套循环中使用许多空格吗?,python,Python,我正在尝试用Python进行数值计算。这涉及7个嵌套循环(我有一个5维数组,需要在上面循环) 这是大量的空格或缩进。我经常把时间花在从左到右和向后移动编辑器窗口,或者在选项卡/空格中键入内容上 有没有办法避免这种情况 编辑: 下面是一些Fortran伪代码,用于简化我的问题。希望它能向您展示我需要如何定制访问5维数组fe的索引。请注意操作如何依赖于在不同索引位置定义的其他数组,以及条件语句如何控制某些索引: do iy=1,ny do ix=1,nx do im=0,mmax imm=im-1

我正在尝试用Python进行数值计算。这涉及7个嵌套循环(我有一个5维数组,需要在上面循环)

这是大量的空格或缩进。我经常把时间花在从左到右和向后移动编辑器窗口,或者在选项卡/空格中键入内容上

有没有办法避免这种情况

编辑: 下面是一些Fortran伪代码,用于简化我的问题。希望它能向您展示我需要如何定制访问5维数组
fe
的索引。请注意操作如何依赖于在不同索引位置定义的其他数组,以及条件语句如何控制某些索引:

do iy=1,ny
do ix=1,nx
do im=0,mmax
imm=im-1
imp=im+1

nqi=ni
if(im.eq.0) nqi=1
do ii=1,nqi
iq=3-2*ii
iiz=3-ii

do in=im,nmax

do ip=1,np
fb(ii,ip,in,im)=0.5d0*( fe(ii,ix,iy,ip-1,in,im)+fe(ii,ix,iy,ip+1,in,im) ) 
enddo
fb(ii,0,in,im)=0.d0 
enddo

fb(ii,0,0,im)=fe(ii,ix,iy,1,0,im)

do ip=0,np
do in=im,nmax

qdp=0.5*Fy(ix+2,iy,ip)

inm=max(0,in-1)
inp=in+1
qfb=fb(ii,ip,in,im)

qfb=qfb-qdp*( Gb(ii,ip,inm,imm)*cGyzm(in,im)  - Gb(ii,ip,inm,imp)*cGyzp(in,im) )

fb(ii,ip,in,im)=qfb
enddo
enddo

enddo
ii=1

enddo
enddo
enddo

您可能应该将一些内部循环移动到它们自己的函数中,这将减少缩进,并使代码更易于理解。

您有维度5的数组
A
,以及每个维度的索引列表。 您可以使用
itertools.product
和元组解包将其展平:

indices = itertools.product(ind_1, ind_2, ind_3, ind_4, ind_5)
for x, y, z, j, k in indices:
   elt = A[x][y][z][j][k]
   # do something with elt :)

你需要显示你的代码!您可以使用缩进2而不是标准的4。不,使用for循环时无法避免缩进。您可以将空格数从4减少到1或2。
导入此
——“扁平比嵌套好”。您应该重构以避免循环,或者
numpy
可能会有所帮助。如果您正在进行数值计算,则使用numpy数组并让numpy为您执行循环。为什么要进行向下投票?这正是当你有很多嵌套的循环时你应该做的。我不想这样做,因为每个循环都有很多依赖于以前循环中计算的数量,这需要来回传递很多参数。但是,强烈建议这样做。尤其是因为它使重构代码变得更容易。我相信,如果你真的展示了python代码,你会得到很多改进/重构的建议。谢谢,但我不认为这会使我能够对循环索引进行复杂的控制,而我需要在循环的每个级别进行这种控制。我已经在我原来的帖子中添加了代码。