【问题标题】:Reduce a list using lambda使用 lambda 减少列表
【发布时间】:2016-01-26 22:37:13
【问题描述】:

我需要写几个这样的函数。有没有更好的方法在一行左右使用 lambda 编写这个函数。

def is_digital(offers):
    for offer in offers:
        digital = True if 'digital' in offer and offer['digital'] else False
        if digital:
            return True
    return False

【问题讨论】:

  • lambda offers: any(offer.get('digital') for offer in offers)?

标签: python python-2.7 lambda reduce


【解决方案1】:

对我来说,以下检查方式更具可读性和明确性:

def is_digital(offers):
    return any(map(lambda x: x.get('digital', False), offers))

您甚至可以丢弃默认的“False”,因为如果没有找到指定的键,则“None”是默认返回值。但我认为代码会变得不那么明确。

def is_digital(offers):
    return any(map(lambda x: x.get('digital'), offers))

选择权在你。 =)

【讨论】:

    【解决方案2】:

    您可以为此使用any。

    def is_digital(offers):
        return any(offer.get('digital') for offer in offers)
    

    或者,如果您想删除完整的函数定义而只使用 lambda(不是最好的主意),您可以这样做:

    is_digital = lambda offers: any(offer.get('digital') for offer in offers)
    

    感谢 jonrsharpe 的评论提醒我 .get 是一个东西。

    【讨论】:

    • 值得注意的是,使用三元组设置True 或False,然后单独测试结果只是很奇怪...
    • @jonrsharpe 是的,我很困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 2020-05-13
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 2019-12-30
    相关资源
    最近更新 更多