我将在那里窃取问题的形式: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
,并且没有人真的喜欢它。
答案 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。