мне удалось изменить рецепт roundrobin в https://docs.python.org/3.1/library/itertools.html
включить ограничение (остановка при достижении X элементов) - код ниже ...питона itertools круговой, без дупликации
Теперь - то, что я действительно хочу «остановитесь при достижении элементов X, но без дублирования элементов».
Возможно ли это? (Потому что это генератор ...)
def roundrobin(limit, *iterables):
"roundrobin('ABC', 'D', 'EF') --> A D E B F C"
# Recipe credited to George Sakkis
pending = len(iterables)
nexts = cycle(iter(it).next for it in iterables)
while pending:
try:
for next in nexts:
yield next()
limit -= 1
if limit == 0:
return
except StopIteration:
pending -= 1
nexts = cycle(islice(nexts, pending))
называя его:
candidates = [['111', '222', '333'],['444','222','555']]
list(roundrobin(4, *candidates))
Я хотел бы получить:
['111,'444','222','333']
и нет:
['111,'444','222','222']
как я получаю с текущим кодом
Да, конечно, это возможно. Добавьте 'set', чтобы отслеживать элементы, полученные до сих пор. – jonrsharpe
но ограничение - внутренний. Предположим, что у меня есть повторение, я хочу, чтобы округлый «знал», чтобы дать еще один ... – Boaz
Это прекрасно - только декремент 'limit', когда вы« сдаете ». Обратите внимание, что вы можете использовать 'while pending and limit', а не явно проверять' limit == 0'. – jonrsharpe