【问题标题】:remove from the list of missing values None [duplicate]从缺失值列表中删除无 [重复]
【发布时间】:2017-01-11 09:30:38
【问题描述】:
[['user_1',
  'user_2',
  'user_8',
   None,
   None],
 ['ben',
  'karl',
   None,
   None]]

我尝试删除缺失值

for element in df:
     element=[x for x in element if x is not None]

这段代码保持原样

【问题讨论】:

标签: python list


【解决方案1】:

您的代码的问题在于该行

element=[x for x in element if x is not None]

创建新的过滤列表并将其绑定到名称element,它替换名称element 绑定到的旧列表对象。但是我们可以使用切片赋值来让它改变那个列表:

df = [
    [
        'user_1',
        'user_2',
        'user_8',
        None,
        None,
    ],
    [
        'ben',
        'karl',
        None,
        None,
    ]
]

# Remove the `None` values
for element in df:
     element[:] = [x for x in element if x is not None]

for row in df:
    print(row)

输出

['user_1', 'user_2', 'user_8']
['ben', 'karl']

【讨论】:

    【解决方案2】:
    for element in df:
         element[:]=[x for x in element if x is not None]
    

    出来:

    [['user_1', 'user_2', 'user_8'], ['ben', 'karl']]
    

    Document:

    【讨论】:

      【解决方案3】:
      my_list= [['user_1',
        'user_2',
        'user_8',
         None,
         None],
       ['ben',
        'karl',
         None,
         None]]
      
      print [ [ elt for elt in a_list if elt is not None ] for a_list in my_list ]
      

      [['user_1', 'user_2', 'user_8'], ['ben', 'karl']]

      【讨论】:

      • 这也会删除带有0的列表项...
      • @l'L'l 对,已修复。
      • 如果len(my_list) 很小,这很好,但如果它很大,可能需要通过改变现有列表而不是替换它来节省 RAM。 OTOH,替换 my_list 比改变它快一点。
      【解决方案4】:

      重新分配element 不会改变列表,因为element 是一个单独的变量。

      稍作改动,您就可以使用嵌套推导生成一个新的外部列表,如下所示:

      df = [[x for x in element if x is not None] for element in df]
      

      【讨论】:

        猜你喜欢
        • 2012-05-19
        • 1970-01-01
        • 1970-01-01
        • 2019-06-12
        • 2018-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多