2016-03-09 3 views
1

У меня есть 2 списка: (песни1, песни2) и мне нужно, чтобы объединить эти списки в другой список, который содержит list1 и list2 в следующем порядке:Объединить Списки в Python

  • listNew = [List1 (I), песни2 (я), песни1 (я + 1), песни2 (я + 1), ...]

Я попытался это:

listNew = list1 + list2  
for i in listNew: 
    listNew.append(i) 
    hranyNew.append(pocetHran/2+i) 

но получил ошибку говоря:

неподдерживаемый тип операнда (ов) для +: 'Int' и '' ул

И еще один вопрос, как я могу сравнить listNew[i] и listNew[i+1] с listNew[i+2] и listNew[i+3]?

Другими словами, мне нужно сравнить все соседние пары с pair+1, 2 и т. Д. Спасибо!

+0

'listNew = [y для x в zip (list1, list2) для y в x]' должен сделать первый вопрос. – zondo

+0

Спасибо! Это именно то, что я хочу – user1928543

+0

, может быть, другой вопрос, как создать listNew [list1 (i) list2 (i), list1 (i + 1) list2 (i + 1), ...)? – user1928543

ответ

5

Я хочу отметить очень удобный itertools.chain():

from itertools import chain 

list1 = ['1','2','3'] 
list2 = ['a','b','c'] 

listNew = list(chain.from_iterable(zip(list1, list2))) 
# listNew = ['1', 'a', '2', 'b', '3', 'c'] 

Вы можете также использовать list comprehension с двойной петлей:

listNew = [y for x in zip(list1, list2) for y in x] 
# listNew = ['1', 'a', '2', 'b', '3', 'c'] 

Если вы хотите объединить пары элементов в вашем listNew, то есть:

listNew_ = [x + y for x, y in zip(list1, list2)] 
# listNew_ = ['1a', '2b', '3c'] 
+1

Хороший набор опций; upvoted. Для конкатенирования пар вы можете получить еще более умное нажатие всей работы на C-слой в CPython: 'from operator import concat',' listNew = list (map (concat, list1, list2)) ' – ShadowRanger

+0

@ShadowRanger очень круто; благодаря! – Daniel

0
merged_list = [] 
length = min([len(list1), len(list2)]) 
for l in range(0,length): 
    merged_list.append(list1[l]) 
    merged_list.append(list2[l]) 

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