【问题标题】:Unable to use *= python operator in list comprehension [duplicate]无法在列表理解中使用 *= python 运算符 [重复]
【发布时间】:2016-09-22 23:44:14
【问题描述】:

我不知道为什么我不能在列表理解中使用 *= 运算符,而在 for 循环中使用它可以吗?

def funcLC(l):
    ans = 1
    [ans *= x for x in l if x < 0]
    return ans

SyntaxError: invalid syntax

def funcFor(l):
    ans = 1
    for x in l:
        if x < 0:
            start *= x
    return ans

【问题讨论】:

  • 列表推导式不仅仅是孩子们编写循环的酷炫方式。它们用于构建列表。如果您不尝试构建列表,则列表推导不是这项工作的工具。
  • 我以前不知道,现在知道了,非常感谢。

标签: python list-comprehension


【解决方案1】:

赋值运算符(及其所有变体)在 Python 中形成 语句,而不是 表达式。不幸的是,列表推导(以及其他推导,如集合、字典和生成器)仅支持表达式。

【讨论】:

    【解决方案2】:

    或者,您可以使用reduce()filter() 来处理它:

    >>> from operator import mul
    >>> from functools import reduce  # needed if Python 3.x
    >>>
    >>> l = [-1, 2, 4, 1, -3]
    >>> reduce(mul, filter(lambda x: x < 0, l), 1)
    3
    

    相关提示:使用reduce() 的指标之一是您有多个值,但需要从中产生一个值。

    【讨论】:

    • 非常感谢 Alexce
    猜你喜欢
    • 2015-11-28
    • 1970-01-01
    • 2016-06-26
    • 2021-03-08
    • 2021-07-13
    • 2023-03-29
    • 2014-03-03
    • 2013-09-06
    • 2021-04-20
    相关资源
    最近更新 更多