【问题标题】:List comprehension with condition有条件的列表理解
【发布时间】:2014-08-17 23:44:32
【问题描述】:

我有一个简单的清单。

>>> a = [0, 1, 2]

我想使用列表推导从中创建一个新列表。

>>> b = [x*2 for x in a]
>>> b
[0, 2, 4]

很简单,但是如果我只想对非零元素进行操作呢?

'if' 在列表推导中需要 'else',所以我想出了这个。

>>> b = [x*2 if x != 0 else None for x in a]
>>> b
[None, 2, 4]

但理想的结果是。

>>> b
[2, 4]

我可以这样做

>>> a = [0, 1, 2]
>>> def f(arg):
...     for x in arg:
...         if x != 0:
...             yield x*2
... 
>>> list(f(a))
[2, 4]

或使用“过滤器”和 lambda

>>> a = [0, 1, 2]
>>> list(filter(lambda x: x != 0, a))
[1, 2]

如何使用列表推导式获得此结果?

【问题讨论】:

    标签: python if-statement list-comprehension generator-expression


    【解决方案1】:

    遵循模式:

    [ <item_expression>
      for <item_variables> in <iterator>
      if <filtering_condition>
    ]
    

    我们可以这样解决:

    >>> lst = [0, 1, 2]
    >>> [num
    ... for num in lst
    ... if num != 0]
    [1, 2]
    

    这一切都是为了形成一个 if 条件测试“非零”值。

    【讨论】:

      【解决方案2】:
      b = [x*2 for x in a if x != 0]
      

      如果你把你的条件放在最后,你就不需要 else(事实上那里不能有 else)

      【讨论】:

        猜你喜欢
        • 2020-05-29
        • 1970-01-01
        • 2020-11-25
        • 2021-11-17
        • 2020-01-07
        • 1970-01-01
        • 2016-09-18
        • 1970-01-01
        • 2019-06-07
        相关资源
        最近更新 更多