2 回答

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]你期望的对子,但很明显,因为每场比赛只有两支球队,只需考虑每个位置显示的数字是第一支球队的得分,你可以推断出另一支球队则相反。

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]并创建您想要的列表。
添加回答
举报