为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Python 中创建深度嵌套循环

如何在 Python 中创建深度嵌套循环

largeQ 2021-09-25 10:00:44
出于某种原因,我现在正在画一个空白。我想列出一个列表,代表足球最后一周(总共 16 场比赛)的所有可能结果。不包括平局场景,应该有 2^16 (65536) 个结果。我知道我可以在每个循环中制作 16 个嵌套的 for 循环,范围长度为 2,但必须有更好的方法。我希望每场比赛本质上都是一个列表(0 表示失败,1 表示胜利)。长度为 65536 的列表中的结果示例:指数 0(共 16 场比赛):[[0,1],[0,1],[0,1],[0,1],[0,1],[0,1],[0,1],[0,1],[ 0,1],[0,1],[0,1],[0,1],[0,1],[0,1],[0,1],[0,1]]下一个索引可能看起来相同(例如),除了最后一个被翻转[[0,1],[0,1],[0,1],[0,1],[0,1],[0,1],[0,1],[0,1],[ 0,1],[0,1],[0,1],[0,1],[0,1],[0,1],[0,1],[1,0]]每个指数都是一周的独特结果。有任何想法吗?
查看完整描述

2 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

你是对的,有更好的方法来做到这一点。您可以简单地使用与您要执行的操作完全等效的product函数itertools。关于它的文档在这里。


这很简单:


>>> from itertools import product

>>> outcomes = list(product(range(2), repeat=16))

>>> print(len(outcomes))

65536

>>> print(outcomes[0])

(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

>>> print(outcomes[10000])

(0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0)

你会注意到这并没有给你[0, 1]你期望的对子,但很明显,因为每场比赛只有两支球队,只需考虑每个位置显示的数字是第一支球队的得分,你可以推断出另一支球队则相反。


查看完整回答
反对 回复 2021-09-25
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

由于有65536个状态,可以用0到65535之间的整数表示,然后转成二进制,再转成你想要的列表。


这是一些有效的代码:


for i in range(65536):

    s = "{:016b}".format(i)

    l = [[1, 0] if ch == "1" else [0, 1] for ch in s]

    print(s)

第一行枚举从 0 到 65535

的所有整数。第二行将数字转换为 16 位二进制数(例如0101010101010101)

第三行将每个数字映射到[0, 1]or[1, 0]并创建您想要的列表。


查看完整回答
反对 回复 2021-09-25
  • 2 回答
  • 0 关注
  • 203 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号