【问题标题】:remove None's by filter but not 0 [duplicate]通过过滤器删除None,但不是0 [重复]
【发布时间】:2019-10-22 19:47:13
【问题描述】:

我得到了一个包含整数和无的列表。 我想只过滤掉无。

[int(all(sub)) for sub in zip(*lists_for_filtering)]

这将删除无,但也删除 0(整数)。 我想修改为保持0(整数)的方式

结果是一个列表列表 [1,0,1,0,1,0,1,0] --> 无结果为 0,但也有 0 结果为 0 --> 这应该导致 1,因为它不是无

【问题讨论】:

  • 想显示lists_for_filtering ?
  • [1,2,3,None,5,4,3,0,None] ... 4 个这样的列表。
  • 假设,lff = [[3, 0, None, 4], [6, 7, 0, None], [8, 0, 5, 6], [4, None, 8, 6]]。您可以使用此列表理解来删除 NoneTypes :[[i for i in l if i!=None] for l in lff]。给:[[3, 0, 4], [6, 7, 0], [8, 0, 5, 6], [4, 8, 6] ]
  • 这是一种可能的解决方案:[[int(x) for x in sub if x is not None] for sub in zip(*lists_for_filtering)]。顺便说一句,使用zip 会改变你的列表结构,这是你故意想要的吗?

标签: python filter nonetype


【解决方案1】:

如果我理解正确,您的问题是 all() 函数,它将 0 和 None 都评估为 False。编写您自己的布尔过滤器,仅将 None 评估为 False,然后再试一次。 做这样的事情:

def noNone(seq):
    if all(map(lambda x: x != None, seq)):
        return True
    else:
        return False 

【讨论】:

    【解决方案2】:

    可以通过显式理解而不是 all 来获得您想要的,因为 all 在布尔上下文中将值测试为 False 以及 0None eval 到 False

    [int(all((a is not None for a in sub))) for sub in zip(*lists_for_filtering)]
    

    【讨论】:

    • 哈库那马塔塔,谢谢!!!!!!
    猜你喜欢
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 2020-06-18
    相关资源
    最近更新 更多