2013-07-22 51 views
0

這是一個相當簡單的問題,但我正在尋找最Python的方法。我有兩個列表:Python:合併兩個列表,覆蓋第一個列表的最後幾行

a = [..., 5, 7, 4, 8] 
b = [a, b, c, d] 

我需要這兩個列表相結合,覆蓋列表a的最後3個數字,使得其產生以下列表:

c = [..., 5, a, b, c, d] 

...代表了不同長度所以理想情況下,這樣做的方法將使用從列表末尾開始的引用,而不是開始(即沿着a[-3]而不是a[27]行)。

我已經嘗試過各種for循環遍歷列表,直到它到達正確的點,但這看起來非常低效,我確信必須有一個更乾淨的方法來做到這一點。

感謝您的幫助,非常感謝。

回答

4

如果你需要一個新的名單,用切片和聯接:

c = a[:-3] + b 

的Python切片表示法允許指標,解釋爲相對於列表的長度。 [:-3][0:len(a) - 3]相同;切割除最後三個元素以外的所有內容。

您也可以將其分配給切片改變就地a

a[-3:] = b 

取代的ab所有元素的最後3個元素。

+0

哇。我在尋找一些複雜的東西,錯過了顯而易見的東西我確實需要改變'a'的位置,所以'a [-3:] = b'已經解決了我所有的問題。 (您的速度非常快,甚至不允許接受此答案!) 非常感謝。 – FreeBixi

2

首先,我會將值3保存爲常量(以避免幻數)。

然後我會簡單地使用:

NUMBER_FROM_END = 3 
c = a[:-NUMBER_FROM_END] + b 
0

如果你想改變list a原地的,你可以使用list's類方法extend。 1)

a = a[:-3] 
a.extend(b) 

2)可以撤消列表,再次然後使用延長它。

a = range(10) 
b = range(11,20) 
b = b[::-1] #reverse b 
b.extend(a[:-3][::-1]) #remove last 3 element of a and reverse it 
b = b[::-1] #again reverse b to get final result 
+0

雖然這隻會附加來自另一個迭代的元素。爲了替換最後三個項目,並在同一時間和地點進行擴展,我認爲是最好的。 – RussW

+0

@RussW謝謝,我也認爲切片會更好。 –