使用两个先前列表中的值创建新列表

时间:2009-11-30 09:30:41

标签: python list

给定列表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 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

list(sum(zip(list1,list2)[::-1],()))

答案 2 :(得分:1)

另一种方式,

from itertools import izip
l1 = [1, 2, 3, 4]
l2 = [5, 6, 7, 8]
l = []
for _ in izip(reversed(l1), reversed(l2)): l.extend(_)

答案 3 :(得分:0)

我建议您使用列表.append()方法来简化您的工作吗?

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

另一个小建议,而不是迭代一个列表或另一个列表,我建议迭代数字索引:

for i in range(len(list1)):

答案 4 :(得分:0)

一衬垫:

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

list是必要的,因为先前的操作返回一个元组。