如何使循环中的循环写的更加简便
以下是我代码的核心部分,当number为1的时候有1层循环,2的时候有两层循环,以此类推,每层循环中又有自身的循环,我需要如何简化我的代码,这样写下去我觉得越来越复杂希望能得到好心人的回复,多谢!
if math.floor(xstart)==math.floor(xend) and math.floor(ystart)==math.floor(yend):
way = dis(xstart, xend, ystart, yend, zstart, zend)
else:
(boundx,boundy) = bound(xstart, xend, ystart, yend)
number = len(boundx)
for i in range(number):
zmay.append(zdep)
if number==1:
for i1 in range(len(zdep)):
way0 = dis(xstart, boundx, ystart, boundy, zstart, zmay)
way1 = dis(boundx, xend, boundy, yend, zmay, zend)
time0 = time(way0, max(zmay, zstart))
time1 = time(way1, max(zmay, zend))
waysum.append(way0+way1)
timesum.append(time0+time1)
waypos.append((i1))
elif number==2:
for i1 in range(len(zdep)):
for i2 in range(len(zdep)):
way0 = dis(xstart, boundx, ystart, boundy, zstart, zmay)
way1 = dis(boundx, boundx, boundy, boundy, zmay, zmay)
way2 = dis(boundx, xend, boundy, yend, zmay, zend)
time0 = time(way0, max(zmay, zstart))
time1 = time(way1, max(zmay, zmay))
time2 = time(way2, max(zmay, zend))
waysum.append(way0+way1+way2)
timesum.append(time0+time1+time2)
waypos.append((i1,i2))
elif number==3:
for i1 in range(len(zdep)):
for i2 in range(len(zdep)):
for i3 in range(len(zdep)):
way0 = dis(xstart, boundx, ystart, boundy, zstart, zmay)
way1 = dis(boundx, boundx, boundy, boundy, zmay, zmay)
way2 = dis(boundx, boundx, boundy, boundy, zmay, zmay)
way3 = dis(boundx, xend, boundy, yend, zmay, zend)
time0 = time(way0, max(zmay, zstart))
time1 = time(way1, max(zmay, zmay))
time2 = time(way2, max(zmay, zmay))
time3 = time(way3, max(zmay, zend))
waysum.append(way0+way1+way2+way3)
timesum.append(time0+time1+time2+time3)
waypos.append((i1,i2,i3)) 提供一个思路,可以把要循环的写成一个函数,然后多次循环的时候用递归就好了 把可以在循环外完成的操作放到外层
可以优化时间复杂度来简化 用 itertools.product leon_xinxin 发表于 2020-4-12 04:56
提供一个思路,可以把要循环的写成一个函数,然后多次循环的时候用递归就好了
谢谢思路 永恒的蓝色梦想 发表于 2020-4-12 11:10
用 itertools.product
可是随着number的增加,参数也会增加呀 _2_ 发表于 2020-4-12 08:36
把可以在循环外完成的操作放到外层
可以优化时间复杂度来简化
谢谢意见 转角频率 发表于 2020-4-12 12:59
可是随着number的增加,参数也会增加呀
product可以指定repeat 用列表推导式来优化代码复杂度,你可以嵌套多个for
页:
[1]