diff --git a/src/sage/graphs/generic_graph.py b/src/sage/graphs/generic_graph.py index 0d156608534..4f0b6c33b15 100644 --- a/src/sage/graphs/generic_graph.py +++ b/src/sage/graphs/generic_graph.py @@ -14367,6 +14367,14 @@ def subgraph(self, vertices=None, edges=None, inplace=False, sage: g.subgraph(list(range(10))) # uses the 'add' algorithm Subgraph of (Path graph): Graph on 10 vertices + The vertices and edges can be specified using generator expressions + (see :issue:`41130`):: + + sage: g = graphs.CompleteGraph(5) + sage: h = g.subgraph(vertices=(v for v in range(4)), edges=((0, v) for v in range(5))) + sage: h.edges(labels=False) + [(0, 1), (0, 2), (0, 3)] + TESTS: The appropriate properties are preserved:: @@ -14519,8 +14527,13 @@ def _subgraph_by_adding(self, vertices=None, edges=None, edge_property=None, imm G.add_vertices(self if vertices is None else vertices) if edges is not None: - edges_to_keep_labeled = frozenset(e for e in edges if len(e) == 3) - edges_to_keep_unlabeled = frozenset(e for e in edges if len(e) == 2) + edges_to_keep_labeled = set() + edges_to_keep_unlabeled = set() + for e in edges: + if len(e) == 3: + edges_to_keep_labeled.add(e) + elif len(e) == 2: + edges_to_keep_unlabeled.add(e) edges_to_keep = [] if self._directed: @@ -14701,8 +14714,13 @@ def _subgraph_by_deleting(self, vertices=None, edges=None, inplace=False, edges_to_delete = [] if edges is not None: - edges_to_keep_labeled = frozenset(e for e in edges if len(e) == 3) - edges_to_keep_unlabeled = frozenset(e for e in edges if len(e) == 2) + edges_to_keep_labeled = set() + edges_to_keep_unlabeled = set() + for e in edges: + if len(e) == 3: + edges_to_keep_labeled.add(e) + elif len(e) == 2: + edges_to_keep_unlabeled.add(e) edges_to_delete = [] if G._directed: for e in G.edge_iterator():