【问题标题】:Python filter lambda - how many items were reduced while reducingPython过滤器lambda - 在减少的同时减少了多少项目
【发布时间】:2018-02-19 19:55:26
【问题描述】:

在使用 python reduce lambda 减少时,是否可以知道已经减少了多少项目?如果是,如何将这段代码转换成它?

例如:

numbers = [1,-1,2,-2,3,-3,4,-4,5,-5,6,-6]
new_list = []
for number in numbers:
   if number > 0 and len(new_list) < 3:
       new_list.append(number)

【问题讨论】:

  • 我不明白。请使用reduce 举例说明您正在尝试执行的操作。 “减少”的元素数是列表中的元素数,或减一,具体取决于您要如何计算。
  • 他想把numbers减少到[1, 2]
  • 为什么需要reduce? new_list = filter(numbers, lambda x: x &gt; 0)[:3]
  • 过滤/减少都很好,但重点是,例如,如果我有一个包含 100 个数字、正数和负数的无序列表,并且我只想要前 5 个正数,我不想过滤整个列表然后对其进行切片。我想知道一种无需遍历整个列表即可获取它们的方法,只需获取前 5 个正数,然后返回
  • @AndersonLuiz 这就是梦龙的回答告诉你怎么做...(结合 islice 和 filter)

标签: python lambda filter reduce


【解决方案1】:

实际上,这是一个很好的问题,因为很多人无法很好地使用 Python 中的一些有用的内置工具。

我不知道为什么人们不赞成你的问题。

这是我的答案,使用 itertools 来做你想做的事:

import itertools
top3 = itertools.islice(filter(lambda x: x > 0, numbers), 3)
print(list(top3))

islice 将只消耗前 3 个元素(因为我们传入了 3),所以我们不必担心列表是否太长,或者即使只有一个满意的数字,代码不会中断,这就是函数式编程的酷炫之处。

结果:

[1, 2, 3]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 2015-10-11
    • 1970-01-01
    • 2016-02-16
    • 2021-02-27
    相关资源
    最近更新 更多