Я хотел бы использовать bisect (как показано здесь, во втором ответе: Does python have a sorted list?), , но вместо использования списка чисел у меня есть список объектов. В частности, объекты из этого класса: https://networkx.github.io/documentation/latest/_modules/networkx/classes/graph.htmlПереопределение атрибута сортировки в классе, python
Я бы хотел, чтобы список сохранял графики, отсортированные по их количеству узлов. Если я вставляю эти графики в список, это похоже на то, что он вставляется произвольным образом (если я запускаю его много раз, он изменяется между прогонами).
Есть ли функция сортировки, которую каждый класс может определить, что при применении сортировки будет использоваться (например, переопределение оператора на других языках)?
import bisect
import networkx as nx
L=[]
G1 = nx.Graph()
G2 = nx.Graph()
G1.add_edges_from([(1,2),(1,3),(2,3),(3,4),(4,5),(4,6),(5,6),(4,7),(7,8),(7,9),(8,9)])
print 'G1', G1.number_of_nodes()
G2.add_edges_from([(1,2),(1,3)])
print 'G2', G2.number_of_nodes()
bisect.insort(L,G1)
bisect.insort(L,G2)
print 'L0 ', L[0].number_of_nodes()
print 'L1' ,L[1].number_of_nodes()
Если есть другой способ сделать это, было бы здорово.
Благодаря
Нечто подобное может быть в порядке: L_sort = отсортирован (L, ключ = L .__ len__) – matlabit
Понял: L_sort = отсортированный (L, ключ = лямбда-график: graph.number_of_nodes()) – matlabit
Или более просто 'L_sort = sorted (L, key = Graph.number_of_nodes) '. Но это эквивалентно 'L_sort = sorted (L, key = len)' given 'Graph' реализует' __len__'. Вам нужно ссылаться на метод класса, а не на экземпляр, поэтому в вашем первом комментарии «Graph .__ len__» также работал бы. – AChampion