import networkx as nx
import itertools

def parelles(g):
    l = []
    for a, b in g.edges:
        if a < b and g.has_edge(b, a):
            l.append((a, b))
    l.sort()
    return l

def llista_canvis1(g, e1, e2):
    if nx.has_path(g, e1, e2):
        c = nx.shortest_path(g, e1, e2)
        lcanvis = []
        anterior = e1
        for node in c[1:]:
            lcanvis.append(g[anterior][node]['canvi'])
            anterior = node
        return lcanvis
    else:
        return []

def llista_canvis2(g, e1, e2):
    try:
        c = nx.shortest_path(g, e1, e2)
        it1 = itertools.pairwise(c)
        it2 = map(lambda t:g[t[0]][t[1]]['canvi'], it1)
        return list(it2)
    except nx.NetworkXNoPath:
        return []

# Tria la solució que vols provar
llista_canvis = llista_canvis1
