我使用以下代码:
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;?
答案 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
循环更清晰。