2012-01-26 5 views
1

Есть ли способ найти общие элементы в двух генераторах Python, помимо чтения одного в список? Вы не можете ничего о себе заказывать.Общие элементы в двух генераторах Python

Как плохой пример:

import random 
a = (random.randint(1, 50000) for _ in xrange(300)) 
b = (random.randint(3500, 3700) for _ in xrange(50))  

# do A and B have any elements in common? 
+0

Возможно, вы бы изменить это и опубликовать немного больше информации и некоторый код? – octopusgrabbus

+0

Определите «общий». Вы спрашиваете, как найти союз между двумя генераторами? –

+0

Я обновил вопрос, чтобы сделать его более понятным. –

ответ

4

Если вы не можете ничего о порядке вещей предположим, то вы не можете логически сделать это, не читая один из генераторов полностью в list (или a set, что может иметь смысл, если вам не нужны дубликаты внутри одного генератора).

Чтобы проиллюстрировать это, предположим, что единственными двумя идентичными элементами были первый элемент одного генератора и последний элемент другого генератора (но вы не знаете, что именно). Вы должны полностью исчерпать один из генераторов, чтобы убедиться, что знаете, какие общие элементы есть.

Как это сделать с set с:

>>> import random 
>>> a = (random.randint(1, 50000) for _ in xrange(300)) 
>>> b = (random.randint(3500, 3700) for _ in xrange(50)) 
>>> set(a).intersection(set(b)) 
set([]) 
>>> a = (random.randint(1, 50000) for _ in xrange(300)) 
>>> b = (random.randint(3500, 3700) for _ in xrange(50)) 
>>> set(a).intersection(set(b)) 
set([3634]) 
+2

Пересечение fwiw можно сделать немного более сжато, как установлено (a) & set (b) ... –

Смежные вопросы