LINUX.ORG.RU

История изменений

Исправление qulinxao3, (текущая версия) :

эскиз (хз работающий ли)(развал списка на голову хвост явно не продукт блэйзинг фаст):

from itertools import count
def mkspli(ita,fu,tbl):
    tbl=list(tbl) #итератор(возможно и просто список) в заведомый список хз
    bufs=dict(zip(tbl,([]for _ in count())))
    def mkItFor(k):
        def itForK():
            while 1:
                while not bufs[k]:
                        try:
                            v=next(ita)
                            bufs[fu(v)].append(v)
                        except Exception as e :
                            print(e)
                            return 
                res,*bufs[k]=bufs[k]
                yield res
        return itForK
    its={k:mkItFor(k) for k in tbl}
    return its

Исходная версия qulinxao3, :

эскиз (хз работающий ли)(развал списка на голову хвост явно не продукт блэйзинг фаст):

from itertools import count
def mkspli(ita,fu,tbl):
    tbl=list(*tbl)
    bufs=dict(zip(tbl,([]for _ in count())))
    def mkItFor(k):
        def itForK():
            while 1:
                while not bufs[k]:
                        try:
                            v=next(ita)
                            bufs[fu(v)].append(v)
                        except Exception as e :
                            print(e)
                            return 
                res,*bufs[k]=bufs[k]
                yield res
        return itForK
    its={k:mkItFor(k) for k in tbl}
    return its