Python:lambda:找到2个排序无限迭代器的第一个常见元素

时间:2016-03-10 14:01:46

标签: python lambda iterator python-2.x

我正在尝试获得1个衬里lambda,它将返回2个已排序迭代器的第一个公共元素。

在这里,我使用NON FINITE迭代器(比如将永远迭代的count()),你无法转换回列表或集合。 (set(count(5))只会让你的python崩溃。)

例如:

from itertools import count
x = count(7)
y = count(5)

结果将是7。

4 个答案:

答案 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)