多重循环转单循环

本文介绍如何用Python实现多层循环,以及如何用单层循环模拟未知深度的循环结构。通过计数数组解析多重循环迭代状态。
摘要由CSDN通过智能技术生成

比如多重循环,从内向外分别是4、3、2重循环,一般是通过3层for循环即可。

对于不确定循环的深度时,可以使用单重循环达到相同的效果,循环内部仍可唯一定位到是多重循环下的哪个迭代。

#!/usr/bin/python3
#coding=utf-8

def multiloop(loop_arr):
    cnt = []
    s = 1
    L = len(loop_arr)
    for i in range(L):
        cnt.append(0)
        s = s * loop_arr[i]
    for i in range(s):
        j = 0
        while(cnt[j] == loop_arr[j]):
            cnt[j] = 0
            cnt[j+1] += 1
            j += 1
        print(f'{i}:'+ ",".join([str(cnt[k]) for k in range(L)]))
        cnt[0] += 1

for i1 in range(2):
    for i2 in range(3):
        for i3 in range(4):
            print(f"{i3}-{i2}-{i1}")
print("4-3-2")
multiloop([4,3,2])

multiloop([4,3,2]),即是从内向外分别4重、3重、2重循环。

multiloop([4,3,2])内部通过计算4*3*2 = 24来得到单重循环的次数。然后通过cnt数组推算当前的单重循环迭代,对应的是多重循环中i1/i2/i3 是那种组合。实际应用中,可i1/i2/i3可能是不同属性的下标。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值