¿El mayor componente de NetworkX ya no funciona?

Según la documentación de networkx, connected_component_subgraphs (G) devuelve una lista ordenada de todos los componentes. Por lo tanto, el primero debería ser el componente más grande.

Sin embargo, cuando trato de obtener el componente más grande de un gráfico G usando el código de ejemplo en la página de documentación

G=nx.path_graph(4) G.add_edge(5,6) H=nx.connected_component_subgraphs(G)[0] 

yo obtengo

 TypeError: 'generator' object has no attribute '__getitem__' 

Solía ​​trabajar en mi otra computadora con versiones anteriores de networkx (creo que 1.7, no estoy 100% seguro)

Ahora estoy usando una computadora diferente con python 2.7.7 y networkx 1.9. ¿Es un problema de versión?

Yo mismo escribí una pequeña función con un par de líneas para encontrar el componente más grande, solo preguntándome por qué surgió este error.

Por cierto, puedo obtener los componentes al convertir el objeto generador en una lista.

 components = [comp for comp in nx.connected_components(G)] 

Pero la lista no está ordenada por tamaño de componente como se indica en la documentación.

ejemplo:

 G = nx.Graph() G.add_edges_from([(1,2),(1,3),(4,5)]) G.add_nodes_from(range(6,20)) components = [comp for comp in nx.connected_components(G)] component_size = [len(comp) for comp in components] print G.number_of_nodes(), G.number_of_edges(), component_size G = nx.Graph() G.add_edges_from([(1000,2000),(1000,3000),(4000,5000)]) G.add_nodes_from(range(6,20)) components = [comp for comp in nx.connected_components(G)] component_size = [len(comp) for comp in components] print G.number_of_nodes(), G.number_of_edges(), component_size 

salida:

 19 3 [3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 19 3 [2, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 

parece que cuando los nombres de los nodos son números grandes y cuando hay un grupo de nodos simples, los subgrafos devueltos no se ordenan correctamente

La documentación de networkx-1.9 se encuentra aquí http://networkx.github.io/documentation/networkx-1.9/reference/generated/networkx.algorithms.components.connected.connected_components.html#networkx.algorithms.components.connected.connected_components

La interfaz se cambió para devolver un generador (como se dio cuenta). El ejemplo en la documentación muestra cómo hacer lo que pides.

Genera una lista ordenada de componentes conectados, primero los más grandes.

 >> G = nx.path_graph(4) >>> G.add_path([10, 11, 12]) >>> sorted(nx.connected_components(G), key = len, reverse=True) [[0, 1, 2, 3], [10, 11, 12]] 

o

 >>> sorted(nx.connected_component_subgraphs(G), key = len, reverse=True)