Общие элементы в двух генераторах Python - PullRequest
1 голос
/ 27 января 2012

Есть ли способ найти общие элементы в двух генераторах 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?

1 Ответ

4 голосов
/ 27 января 2012

Если вы не можете предположить что-либо о порядке элементов, то вы не можете логически сделать это, не считав один из генераторов целиком в list (или set, что может иметь больше смысла, если вы не заботятся о дубликатах в одном генераторе).

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

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

>>> 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])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...