2017-10-11 131 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,谢谢它工作得很好。 –