Создание нового списка со значениями из двух предыдущих списков - PullRequest
0 голосов
/ 30 ноября 2009

Учитывая списки list1 и list2, которые имеют одинаковую длину, создайте новый список, состоящий из последнего элемента list1, за которым следует последний элемент list2, за которым следует от второго до последнего элемента list1, за которым следует второй до последний элемент list2 и т. д. (другими словами, новый список должен состоять из чередующихся элементов реверса list1 и list2). Например, если list1 содержал [1, 2, 3] и list2 содержал [4, 5, 6], то новый список должен содержать [3, 6, 2, 5, 1, 4]. Свяжите новый список с переменной list3.

Мой код:

def new(list1,list2):
    i = 0
    j = 0
    new_list = []
    for j in list1:
        new_list[i-1] = list2[j-1]
        i+= 1
        j += 1
        new_list[i-1] = list2 [j-1]
        i+= 1
        j += 1
    return new_list

Я знаю, это грязно = _ =, помогите?

Ответы [ 5 ]

7 голосов
/ 30 ноября 2009
l1 = [1,2,3]
l2 = [4,5,6]

newl = []
for item1, item2 in zip(reversed(l1), reversed(l2)):
    newl.append(item1)
    newl.append(item2)

print newl
2 голосов
/ 30 ноября 2009
list(sum(zip(list1,list2)[::-1],()))
1 голос
/ 30 ноября 2009

Еще один способ,

from itertools import izip
l1 = [1, 2, 3, 4]
l2 = [5, 6, 7, 8]
l = []
for _ in izip(reversed(l1), reversed(l2)): l.extend(_)
0 голосов
/ 30 ноября 2009

One-вкладыш:

reduce(lambda x,y: list(x+y), reversed(zip(list1,list2)))

list необходимо, поскольку предыдущие операции возвращают кортеж.

0 голосов
/ 30 ноября 2009

Могу ли я предложить сделать вашу работу намного проще, используя вместо этого метод списка .append()?

>>> mylist = []
>>> mylist.append(1)
>>> mylist
[1]
>>> mylist.append(7)
>>> mylist
[1, 7]

Также еще одно небольшое предложение, вместо того, чтобы перебирать один или другой список, я бы предложил перебирать числовые индексы:

for i in range(len(list1)):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...