У меня есть функция, как показано ниже:
def fun(content):
for i in content:
id = i.split('\"')[0]
yield id
return id
Проблема в том, что в содержании есть повторяющиеся значения. Есть ли способ узнать, есть ли уже значение id в генераторе id? Вместо того, чтобы получить окончательный генератор, используйте set ()?
Вы можете использовать set
внутри fun
, чтобы отслеживать идентификаторы, которые уже были просмотрены:
def fun(content):
observed = set()
for i in content:
id = i.split('\"')[0]
if id not in observed:
observed.add(id)
yield id
Кроме того, поскольку вы передаете идентификаторы, вам не нужно возвращаться в конце.
Генератор будет использовать гораздо меньше памяти, однако единственный способ гарантировать, что повторяющиеся значения не будут выводиться, - это отслеживать те, которые были замечены в некотором типе структуры данных. Если вам не нужно, чтобы fun
был возвращающим генератором, то набор был бы проще и, по сути, таким же.
понял, спасибо!:)
Я думал, что генератор будет использовать меньше памяти? если использовать set () внутри, почему бы просто не вернуть окончательный set ()? Я здесь запутался.