2016-01-23 209 views
0

我有這樣一個列表返回相鄰元素:[1, 3, 4, 5, 1] 和我想刪除第一n元素,所以對於n = 3,我要返回列表,而從原來的列表中刪除。所以我會有[1,3,4] 和我的原始列表現在[5, 1]刪除並從列表中

什麼是在Python中做到這一點的最佳方式?

+0

就解決它,謝謝! – Lana

回答

4

在Python 2.7中,它看起來像下面這樣。只需提取部分列表並刪除原始版本中不需要的部分即可。

lst = [1, 3, 4, 5, 1] 
new_lst = lst[:3] 
del lst[:3] 
print lst 
print new_lst 
2

如果要變更原始對象,可以使用[:]進行更改。例如:

>>> x = ['a','b','c','d','e'] 
>>> x[:], removed = x[3:], x[:3] 
>>> x 
['d', 'e'] 
>>> removed 
['a', 'b', 'c'] 

這工作,因爲在右手邊的條款,x[3:]x[:3],都被他們分配到目標左側(x[:]removed)之前評估。

+0

我不會打擾'x [:]';分配給'x'本身具有相同的結果,並且垃圾收集原始列表中的延遲不太可能影響程序的整體性能。 – chepner

+1

@chepner:它沒有相同的結果 - 想象一下'x'正被傳遞給一個函數。使用左側的'x'只會重新綁定本地名稱'x',它不會修改列表。 – DSM

1

這樣的事情?

def pop_n(lst, n): 
    """ 
    Deletes the first *n* elements from *lst* and returns them. 
    """ 
    # validate inputs 
    # might want to use something other than isinstance() 
    if not isinstance(n, int) or n < 0: 
     raise ValueError("n must be a non-negative integer, not {}" 
         .format(n)) 

    # store the elements to return 
    ret = lst[:n] 
    # remove the elements from the original list 
    del lst[:n] 

    return ret 

編輯:這裏是你的榜樣案例演示。

>>> x = [1, 3, 4, 5, 1] 

>>> pop_n(x, 3) 
[1, 3, 4] 
>>> x 
[5, 1] 
0
>>> original = [1, 3, 4, 5, 1] 
>>> removed, original[:3] = original[:3],() 
>>> removed, original 
([1, 3, 4], [5, 1])