列出对新元素的条件的理解

时间:2016-06-04 11:00:17

标签: python list list-comprehension

我将在那里窃取问题的形式:List comprehension with condition

我有一个简单的清单。

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

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

>>> b = [afunction(x) for x in a]
>>> b
[12458, None, 34745]

非常简单,但如果我只想操作非None元素怎么办?我可以这样做:

>>> b = [y for y in [afunction(x) for x in a] if y != None]

我希望能够在单次运行中使用单列表理解来完成它。我相信这会再次遍历列表以过滤掉None,并且没有人真的喜欢它。

1 个答案:

答案 0 :(得分:3)

您不需要构建列表然后再次迭代它,您可以使用afunction使用a中的元素使用map的应用程序的迭代器:

[y for y in map(afunction, a) if y is not None]

或生成器表达式(注意括号类型的变化):

[y for y in (afunction(x) for x in a) if y is not None]
          # ^ here                  ^ and here

另请注意,这些None身份进行测试,而不是相等,每PEP-8