2017-10-11 135 views
2

我試圖從列表中刪除python中的第三和第四列表。如何從Python列表中刪除列表元素

我的清單列表如下:

List = [ 
      ['101', 'Dashboard', '1', '1'], 
      ['102', 'Potential Cstomer', '1', '1'], 
      ['102-01', 'Potential Cstomer', '1', '1'], 
      ['102-02', 'Potential Cstomer Activity', '1', '1'] 
     ] 

刪除列表中的第三和第四個元素之後,我想是這樣的:

NewList = [ 
      ['101', 'Dashboard'], 
      ['102', 'Potential Cstomer'], 
      ['102-01', 'Potential Cstomer'], 
      ['102-02', 'Potential Customer Activity'] 
     ] 

我試圖像我下面的代碼,但它沒有做任何改變。

NewList  = [list(element) for element in List if element[0] or element[1]] 

    print NewList 

我應該如何更改當前的代碼以實現預期的結果?謝謝。

回答

5

Slice每個嵌套列表中的一個列表理解。切片符號開始於索引0和1即[0, 2)停止:

NewList = [element[:2] for element in List] 

當未指定的起始索引,則它被視爲None其是相同列表的起始索引時None出現之前所述第一:

同:

NewList = [element[slice(None, 2)] for element in List] # More verbose 

在Python 3,你可以使用擴展拆包實現應用 '圖示' 操作*同樣的事情:

NewList = [elements for *elements, _, _ in List] 
+0

非常感謝您對您有幫助,並詳細回答。它工作完美。我從中學到了一些東西。歡呼:) –

1

怎麼樣此:

for s in List: 
    del s[3] 
    del s[2] 

就地刪除。

+3

'del s [2:]'會更有效地清除除前兩項之外的所有項目。如果你只想刪除索引2和3,你可以使用'del s [2:4]'。注意這個解決方案不會以任何方式複製,所以數據被丟棄(摩西的解決方案淺拷貝,所以前兩個新列表的級別是獨立的)。 – ShadowRanger

1

該解決方案使用負向索引來允許任意長度的子列表,同時保持兩個尾隨數字的原始條件。

List = [ 
     ['101', 'Dashboard', '1', '1'], 
     ['102', 'Potential Cstomer', '1', '1'], 
     ['102-01', 'Potential Cstomer', '1', '1'], 
     ['102-02', 'Potential Cstomer Activity', '1', '1'] 
    ] 
new_final_list = [i[:-2] for i in List] 
for i in new_final_list: 
    print(i) 

輸出:

['101', 'Dashboard'], 
['102', 'Potential Cstomer'] 
['102-01', 'Potential Cstomer'] 
['102-02', 'Potential Cstomer Activity'] 
+1

關於行爲的小注釋:這刪除了最後兩個元素,而不是保留前兩個元素。當每個子列表中有四個統一的元素時,這兩個操作是等價的,但如果元素長度不均勻,或者執行了兩次操作,則行爲會有很大差異。保留前兩者是更安全和冪等的。 – ShadowRanger

+0

@ShadowRanger謝謝你指出。雖然其他解決方案在性能方面更令人滿意,但我認爲我會包含此解決方案以允許任意長度的子列表。 – Ajax1234

+0

@ Ajax1234,謝謝它工作得很好。 –