我正在尝试获得1个衬里lambda,它将返回2个已排序迭代器的第一个公共元素。
在这里,我使用NON FINITE迭代器(比如将永远迭代的count()),你无法转换回列表或集合。 (set(count(5))只会让你的python崩溃。)
例如:
from itertools import count
x = count(7)
y = count(5)
结果将是7。
答案 0 :(得分:1)
您可以按如下方式使用交叉点:
elt = min(set(x).intersection(set(y)))
答案 1 :(得分:1)
试试这个:
first = lambda x, y: next((a for a in x if a in set(y)), None)
演示:
>>> x = xrange(5, 10)
>>> y = xrange(7, 11)
>>> first = lambda x, y: next((a for a in x if a in set(y)), None)
>>> first(x, y)
7
答案 2 :(得分:0)
浏览列表,直到找到一个公共对象。否则发现将是None。使用迭代器已排序且不需要额外内存的事实。
idx_x = 0
idx_y = 0
found = None
while idx_x < len(x) and idx_y < len(y):
if x[idx_x] == y[idx_y]:
found= x[idx_x]
break
if x[idx_x] < y[idx_y]:
idx_x +=1
else:
idx_y += 1
答案 3 :(得分:-1)
你走了:
next(x for x in count(7) for y in count(5) if x==y)