如何在 N 次迭代后停止 sage graph 生成迭代器?
How to stop sage graph generating iterator after N iterations?
我想使用 sagemath 的 graph.planar_graphs 迭代器创建 N 个平面图。问题是这个函数 return all 给定一定数量的顶点可能的平面图。我想做的是:
while len(gen) < N:
gen = list(graphs.planar_graphs(50))
所以最后,我想要一个列表,其中包含前 N 个生成的平面图,而不是 所有 个平面图(因为图多了很多个数量级,而且计算成本非常高) .
迭代器的一个好处是你可以获取
元素数量随心所欲。
所有 50 阶平面图的迭代器:
sage: planar_50 = graphs.planar_graphs(50)
抢前四名:
sage: planar_50_4 = [next(planar_50) for _ in range(4)]
检查:
sage: planar_graphs_order_k_first_n(50, 4)
[Graph on 50 vertices,
Graph on 50 vertices,
Graph on 50 vertices,
Graph on 50 vertices]
将其转化为函数:
def planar_graphs_order_k_first_n(k, n):
pg = graphs.planar_graphs(k)
return [next(pg) for _ in range(n)]
使用它:
planar_graphs_order_k_first_n(50, 4)
[Graph on 50 vertices,
Graph on 50 vertices,
Graph on 50 vertices,
Graph on 50 vertices]
我想使用 sagemath 的 graph.planar_graphs 迭代器创建 N 个平面图。问题是这个函数 return all 给定一定数量的顶点可能的平面图。我想做的是:
while len(gen) < N:
gen = list(graphs.planar_graphs(50))
所以最后,我想要一个列表,其中包含前 N 个生成的平面图,而不是 所有 个平面图(因为图多了很多个数量级,而且计算成本非常高) .
迭代器的一个好处是你可以获取 元素数量随心所欲。
所有 50 阶平面图的迭代器:
sage: planar_50 = graphs.planar_graphs(50)
抢前四名:
sage: planar_50_4 = [next(planar_50) for _ in range(4)]
检查:
sage: planar_graphs_order_k_first_n(50, 4)
[Graph on 50 vertices,
Graph on 50 vertices,
Graph on 50 vertices,
Graph on 50 vertices]
将其转化为函数:
def planar_graphs_order_k_first_n(k, n):
pg = graphs.planar_graphs(k)
return [next(pg) for _ in range(n)]
使用它:
planar_graphs_order_k_first_n(50, 4)
[Graph on 50 vertices,
Graph on 50 vertices,
Graph on 50 vertices,
Graph on 50 vertices]