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