Я работаю с набором данных электронной почты электронной почты, и я пытаюсь удалить адреса электронной почты, которые не имеют «@ enron.com» (т. Е. Я хотел бы иметь только электронные письма). Когда я попытался удалить эти адреса без @ enron.com, некоторые письма просто пропустили по некоторым причинам. Ниже показан небольшой график, где вершины - адрес электронной почты. Это формат GML:Python igraph: удалить вершины из графика
Creator "igraph version 0.7 Sun Mar 29 20:15:45 2015"
Version 1
graph
[
directed 1
node
[
id 0
label "[email protected]"
]
node
[
id 1
label "steve_will[email protected]"
]
node
[
id 2
label "[email protected]"
]
node
[
id 3
label "[email protected]"
]
node
[
id 4
label "[email protected]"
]
node
[
id 5
label "[email protected]"
]
node
[
id 6
label "[email protected]"
]
node
[
id 7
label "[email protected]"
]
node
[
id 8
label "[email protected]"
]
node
[
id 9
label "[email protected]"
]
edge
[
source 5
target 5
weight 1
]
]
Мой код:
G = ig.read("enron_email_filtered.gml")
for v in G.vs:
print v['label']
if '@enron.com' not in v['label']:
G.delete_vertices(v.index)
print 'Deleted'
В этом наборе, 7 письма должны быть удалены. Однако, исходя из вышеуказанного кода, удаляется только 5 электронных писем.
I не думайте, что вам разрешено удалять вершины, когда вы перебираете «G.vs». Попробуйте собрать их, а затем удалить их все сразу. –
Правильно - модификации набора вершин при итерации над «G.vs» дают непредсказуемые результаты. –