【发布时间】:2016-01-02 20:02:22
【问题描述】:
给定一个包含 N 个数字的列表,使用单个列表推导生成一个仅包含以下值的新列表:
(a) 偶数,以及
(b) 来自原始列表中具有偶数索引的元素
我正在寻找上述问题的解决方案。正如here 建议的那样,有一种简单的方法可以解决它,但我想知道是否有一种方法可以在“FULL”输入列表中使用 map、lambda 和 filter 的组合。
我正在尝试做这样的事情,但它不起作用。
>>> map(lambda i,x : x%2==0 or (i+1)%2==0, range(0,len(l)-1),l)
[False, True, False, True, True]
理想情况下,我需要编写类似(添加“x if”)之类的东西,但这不起作用。有什么建议吗?
map(lambda i,x : ***x if*** x%2==0 or (i+1)%2==0, range(0,len(l)-1),l)
【问题讨论】:
-
为什么要这样解决? map 和 filter 并没有被完全弃用,但列表推导是这里的逻辑解决方案。
-
我只是想学习这些功能,并想知道是否有办法将 IF 与 map 一起使用并返回值列表而不是布尔值列表......你知道吗?有办法吗?
-
Afaik,地图不允许 if。您可能可以将 lambda 与条件表达式一起使用:a = b if c else d;这应该可以解决布尔问题。
-
您正在根据某些条件进行过滤。
map不会帮助你。它不过滤输入。它只是对列表中的每个元素应用一个函数。 -
这些值是否必须同时满足 a 和 b 两个条件,或者至少满足其中一个条件?
标签: python dictionary lambda reduce