2009-11-30 170 views
0

如果列表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 

我知道,这是凌乱= _ =,帮助吗?

+1

这听起来很像功课。如果是这样,你应该这样标记它。 – ChristopheD 2009-11-30 09:45:31

+0

它不仅凌乱,它甚至不能工作 - 它会在你第一次尝试执行'new_list [i-1] = list2 [j-1]'时炸毁。另外'j'是list1中的VALUE,但是您将它用作list2的SUBSCRIPT!建议:使用100,200等测试数据值 - 如果您尝试将这些数据用作列表下标,您将立即收到异常,而不是晚些时候。 – 2009-11-30 13:56:34

回答

5
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 
0

我可以建议通过使用列表.append()方法而使您的工作更简单吗?

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

也是另一个小小的建议,而不是遍历一个列表或者其他,我建议循环访问数字索引:

for i in range(len(list1)): 
+0

我不想手动通过这两个列表并添加值,我想从两个已有的列表添加,谢谢。 – Alex 2009-11-30 09:35:05

+0

但是请看,'append()'方法可以带任何参数,包括现有列表的一个元素。比如说...'new_list.append(list1 [i]))'或类似的。 – Amber 2009-11-30 09:37:32

0

一行代码:

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

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

+0

有趣的高尔夫球:'sum(map(list,reversed(zip(list1,list2))),[])' – 2009-11-30 10:05:19

+0

mm谢谢你给我传递'list()'给'reduce()'的想法反之亦然。减少嵌套。 – int3 2009-11-30 10:57:35

2
list(sum(zip(list1,list2)[::-1],())) 
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(_) 
相关问题