【问题标题】:Python map lambda filter help using IF使用 IF 的 Python 映射 lambda 过滤器帮助
【发布时间】: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 不会帮助你。它不过滤输入。它只是对列表中的每个元素应用一个函数。
  • 这些值是否必须同时满足 ab 两个条件,或者至少满足其中一个条件?

标签: python dictionary lambda reduce


【解决方案1】:

这个问题具体说“使用单个列表理解”。

话虽如此,你可以这样做:

>>> map(lambda x: x[1], filter(lambda x: x[0] % 2 == 0 and x[1] % 2 == 0, enumerate([0, 1, 5, 4, 4])))

enumerate 将使用数字本身压缩索引产生 [(0, 0), (1, 1), (2, 5), (3, 4), (4, 4)]

只有当元组中的两个数字都是偶数时,才会满足给定 lambda 的filter

map 与给定的 lambda 将丢弃索引并保留原始数字

在这个例子中留下 [0, 4]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 2014-07-23
    相关资源
    最近更新 更多