2015-10-29 5 views
0

Мне нужно объединить два списка на один список и распечатать егообъединить два списка в Python к одному

, например:

list1 = [9, 3, 5, 7] 
list2 = [5, 4 , 6] 

list3 = [9, 5, 3, 4, 5, 6, 7] 

Мне нужно сделать это с «за» или «а» потому что мы не узнаем что-то более продвинутое, чем это.

мой код сейчас:

list1 = [3, 4, 5, 6] 
list2 = [1, 2, 0, 9, 9] 
tlist = [] 
n1 = len(list1) 
n2 = len(list2) 
n3 = n1 + n2 
n4 = len(list2) - 1 
n5 = len(list1) - 1 
i = 1 
c = 0 
while i in range(0, n3): 
    tlist.insert(i, list1[c]) 
    tlist.insert(i, list2[c])  
    c += 1 
    i += 2 
tlist.extend(list2[n4:]) 
tlist.extend(list1[n5:]) 
for num in tlist: 
    print num 

результат:

3 
1 
4 
2 
5 
0 
6 
9 
9 
6 

(вот как это должно быть в конце концов) , так что я смог сделать это, если Len (list1) = len (list2) , но если список разной длины, он не работает

+0

либо сначала вы должны написать один список, то другой или проверить в цикле любой из списков были исчерпаны ли – Azad

+1

Вам нужна только любой слияния , или вам нужно поддерживать чередование, которое вы используете? – Prune

ответ

0

Ваш код всегда добавляет последний элемент каждого списка, независимо от его списка. вс. Вместо этого попробуйте это расширение:

tlist.extend(list2[c+1:]) 
tlist.extend(list1[c+1:]) 

я получаю ожидаемый выход с этим изменением: он начинает с того, петля кончила (с), а от последнего элемента (n4, n5).

Кроме того, ваша привязка к циклу while неверна; он работает только в том случае, если две длины списка отличаются не более чем на 1. В противном случае вы получите недопустимую ошибку индекса. Попробуйте следующее:

for c in range(min(n1, n2)): 
    tlist.insert(i, list1[c]) 
    tlist.insert(i, list2[c]) 
    i += 2 
    # do not increment c; the for statement handles that part. 

Это прекращает копирование, когда заканчивается любой из них.

Кстати, , пожалуйста, изменение значимых имен переменных. Серия n1-n5 ничего не говорит о своих целях. 'c' и 'i' также слабы. Не бойтесь набирать больше.


Обновленная программа, в том числе удлиненным теста:

list1 = [3, 4, 5, 6] 
list2 = [1, 2, 0, 9, 8, 7, -1] 
tlist = [] 
n1 = len(list1) 
n2 = len(list2) 
n4 = len(list2) - 1 
n5 = len(list1) - 1 
i = 1 

for c in range(min(n1, n2)): 
    tlist.insert(i, list1[c]) 
    tlist.insert(i, list2[c]) 
    i += 2 
    print tlist 

tlist.extend(list2[c+1:]) 
tlist.extend(list1[c+1:]) 

print tlist 
+0

Хорошо, я попробовал это, но я все еще получаю индексную ошибку, когда добавляю больше номеров в один из списка. и о переменных, когда im имеет готовый код – mars

+0

Хорошо ... так что вы можете указать текущее состояние программы и полученный результат? Вы сделали это хорошо на оригинальной публикации, но вы должны поддерживать ее. Чтобы ускорить процесс, я добавлю, что, по-моему, программа должна быть сейчас. – Prune

+0

спасибо, я пробовал свой код и его то, что мне нужно, но можете ли вы объяснить цикл, который вы создали? – mars

0

просто добавить два списка с помощью "+", чтобы объединить их.

In [1]: a = [1,2,3] 

In [2]: b = [2,3] 

In [3]: a+b 
Out[3]: [1, 2, 3, 2, 3] 

или вы можете сделать следующее:

for i in b: 
    ...:  a.append(i) 
    ...:  

In [5]: a 
Out[5]: [1, 2, 3, 2, 3] 
+0

, если вы посмотрите на мои примеры, новый список должен быть: list3 = [list1 [0], list2 [0], list1 [1], list2 [1] ... – mars

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