2009-11-30 157 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(_) 
相關問題