Я изначально думал, что в итераторе "iter_fraction" у тебя хранится список фракций, а в массиве "frac" информация об этих фракциях (ты выбрал не очень удачное название переменной). В этом случае гораздо лучше было бы сразу обращаться к конкретным фракциям, избавившись от их поиска. То есть, сделать switch с перечислением типов фракций и уже в каждом case прописывать нужный код.
Но вообще выше тебе уже написали лучшее решение: сделать для каждой фракции и каждого типа фракций свой итератор, избавившись от этой проверки. Фракционные сообщения отправляются достаточно часто и есть смысл пожертвовать чуть большим количеством памяти, чтоб увеличить скорость работы.