2010-02-19 1 views
1

Какой самый быстрый способ решить следующую я буду объединять несколько списков на основе общей головы или хвостаприсоединиться списки на основе общей головы или хвоста

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

, что вы подразумеваете под общей головой или хвост. ? вы должны подробно рассказать о том, как вы получаете результат – ghostdog74

+0

Мне нужен метод, который может присоединиться к [5,6,7] и [3,4,5] на 5, чтобы сформировать [3, 4, 5, 6, 7] и [ 1,2,3] к этому выходу на 3, чтобы сформировать [1, 2, 3 4, 5, 6, 7] – Joey

+0

, что относительно '([1, 2, 3], [3, 4], [3, 4 , 5, 6]) 'case? –

ответ

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

Спасибо SilentGhost. Это достаточно общее (str и int) и отлично работает. Есть ли общее название для этого типа метода. Я называю это 'tiling list' – Joey

+0

может быть http://en.wikipedia.org/wiki/Linked_list? – SilentGhost

+0

вход = ([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]) - рекурсия хорошая идея для этого случая? – Joey

Смежные вопросы