Tom*_*ski 5 python python-itertools python-3.x
我使用以下itertools.product函数创建笛卡尔积:
from itertools import product
a = list(map(list, itertools.product(list(range(2)), repeat=3)))
Run Code Online (Sandbox Code Playgroud)
输出:
[[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1], [1, 0, 0], [1, 0, 1], [1, 1, 0], [1, 1, 1]]
Run Code Online (Sandbox Code Playgroud)
然后我通过以下方式摆脱镜子反射:
b = []
for k, v in enumerate(a):
if v[::-1] not in a[:k]:
b.append(v[::-1])
Run Code Online (Sandbox Code Playgroud)
输出:
[[0, 0, 0], [1, 0, 0], [0, 1, 0], [1, 1, 0], [1, 0, 1], [1, 1, 1]]
Run Code Online (Sandbox Code Playgroud)
但是我可以在不保存itertools.product列表中的所有结果的情况下逐步获得相同的效果吗?例如,使用 for 循环的常用方法:
for i in list(map(list, itertools.product(list(range(2)), repeat=3))):
# blah blah blah
Run Code Online (Sandbox Code Playgroud)
因为最终我会使用大的笛卡尔积,至少repeat = 18. 这就是为什么我必须放弃列表中的方法。除非有其他方法可以做到?我将不胜感激任何提示。
import itertools
l = (list(i) for i in itertools.product(tuple(range(2)), repeat=3) if tuple(reversed(i)) >= tuple(i))
print list(l)
Run Code Online (Sandbox Code Playgroud)
输出:
[[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1], [1, 0, 1], [1, 1, 1]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
442 次 |
| 最近记录: |