Нет необходимости или значительного преимущества в преобразовании этого в понимание списка. У вас может остаться нечитаемый код, понятный только вам.
Один стилистический момент, который я поддерживаю, - не создавать списки преждевременно или излишне. Это оставляет параметр открытым для итерации результатов, а не для создания списка, содержащего все результаты.
Например:
from itertools import groupby
from operator import itemgetter
all_data = [('A', 'B', 'C', 'S', 'T'),
('E', 'B', 'C', 'U', 'V'),
('H', 'I', 'J', 'W', 'X')]
groups = groupby(all_data, key=itemgetter(1))
def fun(groups):
for _, g in groups:
gg = list(g)
hosts = ';'.join(list(map(itemgetter(0), gg)))
yield gg[0][3:] + (len(gg),) + (hosts,)
res = list(fun(groups))
[('S', 'T', 2, 'A;E'),
('W', 'X', 1, 'H')]