不使用lambda的python抽象函数

不使用lambda的python抽象函数,python,abstraction,Python,Abstraction,我只是有个问题。如何在没有lambda的情况下使用抽象函数 假设我有两张单子 a = [1,2,3,4,5] b = [2,4,6] 如果我想打印A和B中出现的所有元素 对于lambda: def f(): print reduce (list.__add__ , map (lambda x: filter (lambda y: x == y, b), a)) 没有lambda怎么办 我的意思是,我只是使用辅助函数,而不是lambda,如何得到两个集合的交集?如果您使用集合数据类型,则只

我只是有个问题。如何在没有lambda的情况下使用抽象函数

假设我有两张单子

a = [1,2,3,4,5]
b = [2,4,6]
如果我想打印A和B中出现的所有元素

对于lambda:

def f():
  print reduce (list.__add__ , map (lambda x: filter (lambda y: x == y, b), a))
没有lambda怎么办


我的意思是,我只是使用辅助函数,而不是lambda,如何得到两个集合的交集?如果您使用
集合
数据类型,则只需将
用于union:

print list(set(a) & set(b))

如果存在重复的风险,我会使用计数器:

>>> a = [1, 2, 2, 3]
>>> b = [2, 2, 3]
>>> from collections import Counter
>>> Counter(a) & Counter(b)
Counter({2: 2, 3: 1})
>>>

>>> list_ = []
>>> c = Counter(a) & Counter(b)
>>> for num, count in c.items():
...     list_.extend([num] * count)
...
>>> list_
[2, 2, 3]

或者(稍微)更有效:
set(a)。intersection(b)
@mgilson:我不怀疑它更有效,但它不是对称的:-PIt是一个有用的习惯用法,因为
b
可以是任何iterable(想想生成器)。对于您的版本,您需要将两个集合存储在内存中,但对于我的版本,您只需要1。此外,您正在寻找两个列表的交集,这与Union不同。为什么不想使用lambda?我认为您是指匿名函数“抽象函数”是什么意思?+1这适用于重复的(虽然如果a和b较大,效率会很低)是的,我只是假设这是一个家庭作业类型的问题,不会用于非常大的数据。
>>> a = [1, 2, 2, 3]
>>> b = [2, 2, 3]
>>> from collections import Counter
>>> Counter(a) & Counter(b)
Counter({2: 2, 3: 1})
>>>

>>> list_ = []
>>> c = Counter(a) & Counter(b)
>>> for num, count in c.items():
...     list_.extend([num] * count)
...
>>> list_
[2, 2, 3]