如map所支持的,如何将filter与多个可迭代对象一起使用?

马里奥(Mario Ishac)

filter仅接受一个可迭代的对象,而map接受可变数量的可迭代对象。例如,我可能会耗尽map(operator.add, [1, 2, 3, 4], [1, 2, 2, 4])得到[2, 4, 5, 8]

我正在寻找一种类似的机制filter,接受任何谓词和可变数量的可迭代对象。穷举filter(operator.eq, [1, 2, 3, 4], [1, 2, 2, 4])导致TypeError关于如何filter仅接受1个可迭代项而不是2个。

对于该特定情况([1, 2, 4], [1, 2, 4])我的预期输出是,即operator.eq删除不满足的成对元素

这是我到目前为止的内容(渴望的版本仅支持2个可迭代变量,而不是N):

from typing import TypeVar, Callable, Iterable

A = TypeVar("A")
B = TypeVar("B")

def filter_(predicate: Callable[[A, B], bool], iterable1: Iterable[A], iterable2: Iterable[B]) -> (Iterable[A], Iterable[B]):
    filtered_iterable1 = []
    filtered_iterable2 = []

    for value1, value2 in zip(iterable1, iterable2):
        if predicate(value1, value2):
            filtered_iterable1.append(value1)
            filtered_iterable2.append(value2)

    return filtered_iterable1, filtered_iterable2

但是,我的目标是1)能够支持N个可迭代对象,2)filter_变得懒惰而不是像那样渴望filter

泥浆

怎么样:

def filter_(predicate, *iterables):
    for t in zip(*iterables):
        if predicate(*t):
            yield t

print(list(filter_(operator.eq, [1, 2, 3, 4], [1, 2, 2, 4])))

它是惰性的,它会[(1, 1), (2, 2), (4, 4)]为您的测试用例输出,不,您不会([1, 2, 4], [1, 2, 4])以惰性的方式得到结果。要从转换为[(1, 1), (2, 2), (4, 4)]([1, 2, 4], [1, 2, 4])可以使用:zip(*filter_(operator.eq, [1, 2, 3, 4], [1, 2, 2, 4]))但是,当然,您会失去懒惰。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将QVector与多个对象一起使用

来自分类Dev

如何将componentsSeparatedByString与多个对象一起使用

来自分类Dev

如何将Comparator与多个字段对象一起使用?

来自分类Dev

如何将AdControl与多个AdUnitId一起使用?

来自分类Dev

如何将ArgumentOutOfRangeException与多个参数一起使用?

来自分类Dev

如何将Safeargs与多个navGraphs一起使用

来自分类Dev

如何将didFinishPickingMedia与多个UIImage一起使用

来自分类Dev

如何将requestAnimationFrame与TypeScript对象一起使用?

来自分类Dev

如何将IN与块而不是对象一起使用?

来自分类Dev

如何将useState与对象一起使用?

来自分类Dev

如何将IN与块而不是对象一起使用?

来自分类Dev

如何将ngRepeat与对象一起使用?

来自分类Dev

如何将关联对象与枚举一起使用?

来自分类Dev

如何将 processStrategy 与对象模式一起使用

来自分类Dev

将filter_map与易错的映射功能一起使用时,如何汇总错误的迭代器?

来自分类Dev

如何将反向迭代器与作为代理的迭代器一起使用

来自分类Dev

如何将url_map.iter_rules与蓝图对象而不是应用程序一起使用

来自分类Dev

如何将动态分配与以迭代器作为参数的方法一起使用?

来自分类Dev

如何将Hyper-V与双显示器支持一起使用?

来自分类Dev

如何将Instabug与较早的支持库和Holo主题一起使用

来自分类Dev

如何将我的对象像数组一样与map函数一起使用

来自分类Dev

如何将.vhd磁盘映像转换为可与VMWare Fusion 2一起使用?

来自分类Dev

您如何将jsviews与可排序的jquery一起使用?

来自分类Dev

如何将 if/else 语句与多个支持表达式一起放入列表理解中

来自分类Dev

如何将Django的APIRequestFactory与一系列对象一起使用?

来自分类Dev

如何将Django的APIRequestFactory与一系列对象一起使用?

来自分类Dev

将FILTER函数与多个条件一起使用

来自分类Dev

如何将ng-repeat与filter和$ index一起使用?

来自分类Dev

如何将NReco ffmpeg ConvertMedia与filter_complex一起使用

Related 相关文章

  1. 1

    如何将QVector与多个对象一起使用

  2. 2

    如何将componentsSeparatedByString与多个对象一起使用

  3. 3

    如何将Comparator与多个字段对象一起使用?

  4. 4

    如何将AdControl与多个AdUnitId一起使用?

  5. 5

    如何将ArgumentOutOfRangeException与多个参数一起使用?

  6. 6

    如何将Safeargs与多个navGraphs一起使用

  7. 7

    如何将didFinishPickingMedia与多个UIImage一起使用

  8. 8

    如何将requestAnimationFrame与TypeScript对象一起使用?

  9. 9

    如何将IN与块而不是对象一起使用?

  10. 10

    如何将useState与对象一起使用?

  11. 11

    如何将IN与块而不是对象一起使用?

  12. 12

    如何将ngRepeat与对象一起使用?

  13. 13

    如何将关联对象与枚举一起使用?

  14. 14

    如何将 processStrategy 与对象模式一起使用

  15. 15

    将filter_map与易错的映射功能一起使用时,如何汇总错误的迭代器?

  16. 16

    如何将反向迭代器与作为代理的迭代器一起使用

  17. 17

    如何将url_map.iter_rules与蓝图对象而不是应用程序一起使用

  18. 18

    如何将动态分配与以迭代器作为参数的方法一起使用?

  19. 19

    如何将Hyper-V与双显示器支持一起使用?

  20. 20

    如何将Instabug与较早的支持库和Holo主题一起使用

  21. 21

    如何将我的对象像数组一样与map函数一起使用

  22. 22

    如何将.vhd磁盘映像转换为可与VMWare Fusion 2一起使用?

  23. 23

    您如何将jsviews与可排序的jquery一起使用?

  24. 24

    如何将 if/else 语句与多个支持表达式一起放入列表理解中

  25. 25

    如何将Django的APIRequestFactory与一系列对象一起使用?

  26. 26

    如何将Django的APIRequestFactory与一系列对象一起使用?

  27. 27

    将FILTER函数与多个条件一起使用

  28. 28

    如何将ng-repeat与filter和$ index一起使用?

  29. 29

    如何将NReco ffmpeg ConvertMedia与filter_complex一起使用

热门标签

归档