nx.connected_components
создает нечто, называемое «генератором». Вы можете узнать о них больше здесь: Общие сведения о генераторах в Python
Важным моментом является то, что генератор ничего не вычисляет, пока вы об этом не попросите, и как только он это вычислит, он возвращает вещь, а затем она исчезает из памяти. Так, например, если вы сделаете
for component in nx.connected_components(G):
action(component)
Он найдет один компонент в G
, а затем код перейдет к выполняемому действию. Первый найденный компонент хранится в component
, и сам генератор его больше не запоминает. Когда действие завершено, начинается следующий шаг цикла, и генератор выполнит все вычисления, чтобы найти следующий компонент. Это отлично подходит для сохранения памяти и не позволяет python тратить много времени на вычисления - если вы можете выйти из цикла раньше, ему не придется вычислять более поздние компоненты.
В вашем случае вы сделали list(a)
. Здесь a
- генератор. list
нужно все, что есть в a
. Все они рассчитываются и заносятся в список. Теперь в a
ничего не осталось. Он «истощен». Это нормальное поведение генератора. Список пропал, потому что он не был сохранен с именем.
Для того, что, как мне кажется, вы хотите, вы должны сказать:
import networkx as nx
G = nx.Graph()
G.add_node('a')
G.add_node('b')
b = list(nx.connected_components(G))
Здесь генератор исчерпан, но созданные им значения сохраняются в списке b
, который вы можете использовать повторно.
person
Joel
schedule
02.09.2015