在python中是否有“map until”或“map while”构造?

时间:2015-02-13 09:55:16

标签: python lambda

我使用以下代码:

 for item1 in list1:
    for item2 in list2:
        if item2.add_item_if_belongs(item1):
            break

如果我没有break声明,我会将上面的内容替换为:

for item1 in list1:
    map(lambda item2: item2.add_item_if_belongs(item1), list2)

是否有某种方式可以映射到"或者#34;映射到#34;?

2 个答案:

答案 0 :(得分:1)

你显然不需要地图的输出,所以你需要的更多是“应用”类型的功能。您可以将最里面的循环移动到它自己的函数。

def apply_until( fun, vals ):
    for val in vals:
        if fun(val):
            break

但是你不应该忽略更短代码的清晰度,尽管如此,IMO,for循环也很清晰,也很快。

答案 1 :(得分:0)

类似的东西:

from itertools import dropwhile, islice

for item1 in list1:
    map(lambda item2: item2.add_item(item1), 
        islice(dropwhile(lambda item2: item2.does_not_belong(item1),
               list2), 1))

因此,请删除所有不属于的项目,然后只删除第一项。当然这会使map毫无意义,因为它只对单个项目进行操作而忽略了它创建的单个项目列表。

毋庸置疑,原始for循环更清晰。