Невозможно узнать, сколько значений произведет итератор, не потребляя его до конца. Обратите внимание, что итератор также может быть бесконечным, поэтому в этом случае общее количество даже не определено.
Если вы можете обеспечить конечность итератора, один из способов сделать то, что вы просите, - преобразовать его в список (используя list(iterator)
), а затем использовать обычные функции списка (len
, срез), чтобы разделить его половина. Конечно, таким образом все элементы будут в памяти одновременно, что может или не может быть приемлемо в вашем случае.
В качестве альтернативы, вы можете попробовать использовать собственный класс итератора, который отслеживает общее количество элементов, которые будут произведены. Будет ли это осуществимо, зависит от того, как именно получены итераторы.