【python学习】多层for 循环结构的优化方法(itertools迭代器)

举🌰:

五个盒子,每个盒子里面有3个球(数字表示),每次每个盒子取一个,求组合数,球编号之和。

方法一:for 循环--多层嵌套

box,box1,box2 =  [0,1,2],[0,3,4],[0,5,6]    # 0,1,2 三个盒子,数字代表球的种类
box3,box4,box5 = [0,5,6],[0,3,4],[0,1,2]    # 3,4,5 三个盒子
Box = [box,box1,box2,box3,box4,box5]
count = 0  
# methond 1
for a in Box[0]:
    for b in Box[1]:
        for c in Box[2]: 
            for d in Box[3]:
                for e in Box[4]:
                    for f in Box[5]:
                        print((a,b,c,d,e,f),sep = ',')
                        sum = a+b+c+d+e+f
                        print("sum:",sum)
                        count  += 1
print("count:",int(count))



# 运行结果(展示一部分)
..............
(2, 4, 6, 6, 3, 2)
sum: 23
count: 726
(2, 4, 6, 6, 4, 0)
sum: 22
count: 727
(2, 4, 6, 6, 4, 1)
sum: 23
count: 728
(2, 4, 6, 6, 4, 2)
sum: 24
count: 729

方法一代码太low了,脸上挂不住啊~

方法二:python内置itertools迭代器,具体介绍可以看一下这位小哥的博客:

https://blog.csdn.net/u013300049/article/details/79313979

import itertools

box,box1,box2 =  [0,1,2],[0,3,4],[0,5,6]
box3,box4,box5 = [0,5,6],[0,3,4],[0,1,2]
Box = [box,box1,box2,box3,box4,box5]
count = 0                  
# methond 2
for i in itertools.product(box,box1,box2,box3,box4 ,box5):
    print(i)
    count += 1
    print("sum:",sum(i))
    print("count:",count)


# 结果(展示部分)
..............
(2, 4, 6, 6, 3, 2)
sum: 23
count: 726
(2, 4, 6, 6, 4, 0)
sum: 22
count: 727
(2, 4, 6, 6, 4, 1)
sum: 23
count: 728
(2, 4, 6, 6, 4, 2)
sum: 24
count: 729

总结:如果这篇博客让你有多一点点了解编程知识,那就点个赞吧!

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Python迭代器可以是无限的循环。这意味着迭代器对象可以无限地生成下一个元素,而不会停止。一个常见的例子是使用itertools模块中的`cycle`函数来创建一个无限迭代器。这个函数接受一个可迭代对象作为参数,并在迭代过程中不断重复这个对象的元素。 以下是一个示例代码,展示了如何使用`cycle`函数创建一个无限循环迭代器: ``` import itertools l = ['Geeks', 'for', 'Geeks'] iterators = itertools.cycle(l) for i in range(6): print(next(iterators), end=" ") ``` 输出结果为:`Geeks for Geeks Geeks for Geeks Geeks` 在这个例子中,我们定义了一个列表`l`,然后使用`cycle`函数创建了一个无限迭代器`iterators`。在循环中,我们使用`next`函数来获取迭代器的下一个元素,并将其打印出来。由于迭代器是无限的,所以它会无限地重复打印列表中的元素。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Python 教程之控制流(11)无限迭代器](https://blog.csdn.net/m0_73720982/article/details/127122759)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Python迭代器定义与简单用法分析](https://download.csdn.net/download/weixin_38689551/13772081)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值