【问题标题】:How to delete multiple columns from a list of lists如何从列表列表中删除多个列
【发布时间】:2021-05-24 08:28:38
【问题描述】:
test_list = [[4, 5, 6, 8], 
         [2, 7, 10, 9], 
         [12, 16, 18, 20]] 

如果我想从列表中删除第 2 列,即 [5,7,16],我知道我可以使用:

[j.pop(1) for j in test_list] 

但是,如果我想同时移动2列,即[5,7,16]和[8,9,20],我该如何更改代码,所以结果是:

The modified mesh after column deletion : [[4, 6], [2, 10], [12, 18]]

【问题讨论】:

  • 先删除第 1 列,再删除第 3 列?
  • 为什么不使用 numpy 和 delete columns 优化代码?
  • 也许只是选择你想要的列而不是删除:list(map(itemgetter(0, 2), test_list))

标签: python


【解决方案1】:

这是另一种方式:

columns_to_remove = (1,3)
new_object = [[x for i,x in enumerate(l) if i not in columns_to_remove] for l in test_list]

请注意,这会创建一个新对象,而不会修改原始 test_list

【讨论】:

  • 不,它不会产生相同的结果。 [[4, 5, 6, 8], [2, 7, 10, 9], [12, 16, 18, 20]]
  • 现在,在代码被编辑之后,它可以正常工作,在它没有生成正确的结果之前。
【解决方案2】:
test_list = [[4, 5, 6, 8], [2, 7, 10, 9],[12, 16, 18, 20]]
removeIndex = [1,3] # The indices you want to remove
for l in test_list:
    for i,v in enumerate(removeIndex):
        l.pop(v-i)
print(test_list)

【讨论】:

    【解决方案3】:

    您可以尝试使用所需索引进行列表推导 注意:我不是在更改原始列表,而是在创建全新的列表

    test_list = [[4, 5, 6, 8], 
             [2, 7, 10, 9], 
             [12, 16, 18, 20]] 
    
    [[i[0], i[2]] for i in test_list]
    
    [[4, 6], [2, 10], [12, 18]]
    

    【讨论】:

      【解决方案4】:

      您可以使用 numpy 轻松完成:

      import numpy as np
      test_list = [[4, 5, 6, 8],
                   [2, 7, 10, 9],
                   [12, 16, 18, 20]]
      
      a = np.array(test_list)
      a = np.delete(a, [1,3], axis=1)
      
      print(a)
      #output:
      [[ 4  6]
       [ 2 10]
       [12 18]]
      

      【讨论】:

      • 您实际上可以在一次删除中给出多个列。使用这个a = np.delete(a, [1, 3], 1)
      • @JoeFerndz。好主意。我更新我的答案。谢谢。
      【解决方案5】:

      您可以使用 numpy 数组删除多个列。请查看numpy.delete() 获取文档。

      import numpy as np
      test_list = [[4, 5, 6, 8], 
               [2, 7, 10, 9], 
               [12, 16, 18, 20]]
      a = np.array(test_list)
      a = np.delete(a, [1, 3], axis=1)
      print (a)
      

      输出将是:

      [[ 4  6]
       [ 2 10]
       [12 18]]
      

      如果要删除一列或一组列,也可以将 numpy.delete 与 slice() 一起使用。

      如果要删除第 2 列和第 3 列,可以给出:

      np.delete(a, slice(1, 3), axis=1)
      
      array([[ 4,  8],
             [ 2,  9],
             [12, 20]])
      

      如果要删除第 2 列和第 4 列,可以使用 slice(start, stop, skip) 选项,如下所示:

      np.delete(a, slice(1, None,2), 1)
      

      输出将是:

      array([[ 4,  6],
             [ 2, 10],
             [12, 18]])
      

      如果您希望将 numpy 数组作为常规列表存储回来,您可以随时使用a.tolist()

      【讨论】:

        猜你喜欢
        • 2020-09-28
        • 2012-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多