鱼C论坛

 找回密码
 立即注册
查看: 439|回复: 8

如何使循环中的循环写的更加简便

[复制链接]
发表于 2020-4-12 00:14:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
以下是我代码的核心部分,当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[0], ystart, boundy[0], zstart, zmay[0][i1])
            way1 = dis(boundx[0], xend, boundy[0], yend, zmay[0][i1], zend)
            time0 = time(way0, max(zmay[0][i1], zstart))
            time1 = time(way1, max(zmay[0][i1], 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[0], ystart, boundy[0], zstart, zmay[0][i1])
                way1 = dis(boundx[0], boundx[1], boundy[0], boundy[1], zmay[0][i1], zmay[1][i2])
                way2 = dis(boundx[1], xend, boundy[1], yend, zmay[1][i2], zend)
                time0 = time(way0, max(zmay[0][i1], zstart))
                time1 = time(way1, max(zmay[0][i1], zmay[0][i2]))
                time2 = time(way2, max(zmay[0][i2], 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[0], ystart, boundy[0], zstart, zmay[0][i1])
                    way1 = dis(boundx[0], boundx[1], boundy[0], boundy[1], zmay[0][i1], zmay[1][i2])
                    way2 = dis(boundx[1], boundx[2], boundy[1], boundy[2], zmay[1][i2], zmay[2][i3])
                    way3 = dis(boundx[2], xend, boundy[2], yend, zmay[2][i3], zend)
                    time0 = time(way0, max(zmay[0][i1], zstart))
                    time1 = time(way1, max(zmay[0][i1], zmay[0][i2]))
                    time2 = time(way2, max(zmay[0][i2], zmay[0][i3]))
                    time3 = time(way3, max(zmay[0][i3], zend))
                    waysum.append(way0+way1+way2+way3)
                    timesum.append(time0+time1+time2+time3)
                    waypos.append((i1,i2,i3))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-12 04:56:43 | 显示全部楼层
提供一个思路,可以把要循环的写成一个函数,然后多次循环的时候用递归就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-12 08:36:40 From FishC Mobile | 显示全部楼层
把可以在循环外完成的操作放到外层
可以优化时间复杂度来简化
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-12 11:10:02 | 显示全部楼层
用 itertools.product
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-12 12:58:10 | 显示全部楼层
leon_xinxin 发表于 2020-4-12 04:56
提供一个思路,可以把要循环的写成一个函数,然后多次循环的时候用递归就好了

谢谢思路
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-12 12:59:14 | 显示全部楼层

可是随着number的增加,参数也会增加呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-12 12:59:46 | 显示全部楼层
_2_ 发表于 2020-4-12 08:36
把可以在循环外完成的操作放到外层
可以优化时间复杂度来简化

谢谢意见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-12 12:59:50 | 显示全部楼层
转角频率 发表于 2020-4-12 12:59
可是随着number的增加,参数也会增加呀

product可以指定repeat
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-12 14:27:55 From FishC Mobile | 显示全部楼层
用列表推导式来优化代码复杂度,你可以嵌套多个for
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 08:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表