2010-02-19 5 views
1

Quel est le meilleur moyen de résoudre le suivant, je rejoindre plusieurs listes basées sur la tête commune ou la queuejoindre listes basées sur la tête commune ou la queue

input = ([5,6,7], [1,2,3], [3,4,5], [8, 9]) 
output = [1, 2, 3, 4, 5, 6, 7] 
+3

ce que vous entendez par la tête commune ou queue. ? vous devriez élaborer sur comment vous obtenez la sortie – ghostdog74

+0

Je voudrais une méthode qui peut joindre [5,6,7] et [3,4,5] sur 5 pour former [3, 4, 5, 6, 7] et [ 1,2,3] à cette sortie sur 3 pour former [1, 2, 3 4, 5, 6, 7] – Joey

+0

qu'en est-il de '([1, 2, 3], [3, 4], [3, 4 , 5, 6]) 'cas? –

Répondre

1
>>> def chain(inp): 
    d = {} 
    for i in inp: 
     d[i[0]] = i[:], i[-1] 
    l, n = d.pop(min(d)) 
    while True: 
     lt, n = d.pop(n, [None, None]) 
     if n is None: 
      if len(d) == len(inp) - 1: 
       l, n = d.pop(min(d)) 
       continue 
      break 
     l += lt[1:] 
    return l 

>>> chain(input) 
[1, 2, 3, 4, 5, 6, 7] 
>>> chain(([5,6,7], [1,2,10], [3,4,5], [8, 9])) 
[3, 4, 5, 6, 7] 
+0

Merci SilentGhost. C'est assez général (str et int) et fonctionne parfaitement. Y a-t-il un nom général pour ce type de méthode? Je l'appelle «liste de carrelage» – Joey

+0

peut être http://en.wikipedia.org/wiki/Linked_list? – SilentGhost

+0

entrée = ([5,6,7], [1,2,3], [3,4,5], [8, 9], [9, 10, 11], [12]) output = ([1, 2, 3, 4, 5, 6, 7], [8, 9, 10, 11]) la récursivité est-elle une bonne idée pour ce cas? – Joey

Questions connexes